diff --git a/.gitignore b/.gitignore index bd28bb6d..3c8cb3e0 100644 --- a/.gitignore +++ b/.gitignore @@ -4,7 +4,6 @@ __pycache__/ coverage/ node_modules/ -dist/ old/*output old/*.scad diff --git a/.vscode/settings.json b/.vscode/settings.json index 4da41f2d..b3c804c4 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -20,7 +20,7 @@ }, "cSpell.words": ["registryref"], "editor.codeActionsOnSave": { - "source.fixAll.eslint": true + "source.fixAll.eslint": "explicit" }, "rpc.enabled": true } diff --git a/CNAME b/CNAME new file mode 100644 index 00000000..9a194389 --- /dev/null +++ b/CNAME @@ -0,0 +1 @@ +3duf.org \ No newline at end of file diff --git a/dist/animations.css b/dist/animations.css new file mode 100644 index 00000000..f9bd2c75 --- /dev/null +++ b/dist/animations.css @@ -0,0 +1,57 @@ +#resolution-toolbar { + align-content: center; + position: absolute; + width: 500px; + height: 120px; + top: 10px; + right: 100px; + background-color: rgb(250, 250, 250); + z-index: 9; + box-shadow: 0px 2px 5px 0 rgba(0, 0, 0, 0.36); + transition: all 0.4s; + padding-left: 30px; + padding-right: 30px; + padding-top: 5px; + padding-botton: 5px; + opacity: 0.9; + border-radius: 5px; +} + +#zoom-toolbar { + align-content: center; + position: absolute; + /*width: 100px;*/ + height: 30%; + top: 100px; + right: 30px; + /*background-color: rgb(250, 250, 250);*/ + z-index: 9; + transition: all 0.4s; + padding-top: 25px; + padding-botton: 25px; + /*opacity: 0.9;*/ + border-radius: 5px; +} + +#toolbar-button-panel { + position: absolute; + top: 10px; + right: 10px; + z-index: 9; +} + +.showtoolbar { + -webkit-transform: translateY(0); + transform: translateY(0); + visibility: visible; +} + +.hidetoolbar { + -webkit-transform: translateY(-100%); + transform: translateY(-100%); + visibility: hidden; +} + +.collapse { + display: none; +} diff --git a/dist/css/app.85a0644e.css b/dist/css/app.85a0644e.css new file mode 100644 index 00000000..63d517af --- /dev/null +++ b/dist/css/app.85a0644e.css @@ -0,0 +1 @@ +.noUi-target,.noUi-target *{-webkit-touch-callout:none;-webkit-tap-highlight-color:transparent;-webkit-user-select:none;touch-action:none;-ms-user-select:none;-moz-user-select:none;user-select:none;box-sizing:border-box}.noUi-target{position:relative}.noUi-base,.noUi-connects{width:100%;height:100%;position:relative;z-index:1}.noUi-connects{overflow:hidden;z-index:0}.noUi-connect,.noUi-origin{will-change:transform;position:absolute;z-index:1;top:0;right:0;height:100%;width:100%;-ms-transform-origin:0 0;-webkit-transform-origin:0 0;-webkit-transform-style:preserve-3d;transform-origin:0 0;transform-style:flat}.noUi-txt-dir-rtl.noUi-horizontal .noUi-origin{left:0;right:auto}.noUi-vertical .noUi-origin{top:-100%;width:0}.noUi-horizontal .noUi-origin{height:0}.noUi-handle{backface-visibility:hidden;position:absolute}.noUi-touch-area{height:100%;width:100%}.noUi-state-tap .noUi-connect,.noUi-state-tap .noUi-origin{transition:transform .3s}.noUi-state-drag *{cursor:inherit!important}.noUi-horizontal{height:18px}.noUi-horizontal .noUi-handle{width:34px;height:28px;right:-17px;top:-6px}.noUi-vertical{width:18px}.noUi-vertical .noUi-handle{width:28px;height:34px;right:-6px;bottom:-17px}.noUi-txt-dir-rtl.noUi-horizontal .noUi-handle{left:-17px;right:auto}.noUi-target{background:#fafafa;border-radius:4px;border:1px solid #d3d3d3;box-shadow:inset 0 1px 1px #f0f0f0,0 3px 6px -5px #bbb}.noUi-connects{border-radius:3px}.noUi-connect{background:#3fb8af}.noUi-draggable{cursor:ew-resize}.noUi-vertical .noUi-draggable{cursor:ns-resize}.noUi-handle{border:1px solid #d9d9d9;border-radius:3px;background:#fff;cursor:default;box-shadow:inset 0 0 1px #fff,inset 0 1px 7px #ebebeb,0 3px 6px -3px #bbb}.noUi-active{box-shadow:inset 0 0 1px #fff,inset 0 1px 7px #ddd,0 3px 6px -3px #bbb}.noUi-handle:after,.noUi-handle:before{content:"";display:block;position:absolute;height:14px;width:1px;background:#e8e7e6;left:14px;top:6px}.noUi-handle:after{left:17px}.noUi-vertical .noUi-handle:after,.noUi-vertical .noUi-handle:before{width:14px;height:1px;left:6px;top:14px}.noUi-vertical .noUi-handle:after{top:17px}[disabled] .noUi-connect{background:#b8b8b8}[disabled].noUi-handle,[disabled] .noUi-handle,[disabled].noUi-target{cursor:not-allowed}.noUi-pips,.noUi-pips *{box-sizing:border-box}.noUi-pips{position:absolute;color:#999}.noUi-value{position:absolute;white-space:nowrap;text-align:center}.noUi-value-sub{color:#ccc;font-size:10px}.noUi-marker{position:absolute;background:#ccc}.noUi-marker-large,.noUi-marker-sub{background:#aaa}.noUi-pips-horizontal{padding:10px 0;height:80px;top:100%;left:0;width:100%}.noUi-value-horizontal{transform:translate(-50%,50%)}.noUi-rtl .noUi-value-horizontal{transform:translate(50%,50%)}.noUi-marker-horizontal.noUi-marker{margin-left:-1px;width:2px;height:5px}.noUi-marker-horizontal.noUi-marker-sub{height:10px}.noUi-marker-horizontal.noUi-marker-large{height:15px}.noUi-pips-vertical{padding:0 10px;height:100%;top:0;left:100%}.noUi-value-vertical{transform:translateY(-50%);padding-left:25px}.noUi-rtl .noUi-value-vertical{transform:translateY(50%)}.noUi-marker-vertical.noUi-marker{width:5px;height:2px;margin-top:-1px}.noUi-marker-vertical.noUi-marker-sub{width:10px}.noUi-marker-vertical.noUi-marker-large{width:15px}.noUi-tooltip{display:block;position:absolute;border:1px solid #d9d9d9;border-radius:3px;background:#fff;color:#000;padding:5px;text-align:center;white-space:nowrap}.noUi-horizontal .noUi-tooltip{transform:translate(-50%);left:50%;bottom:120%}.noUi-vertical .noUi-tooltip{transform:translateY(-50%);top:50%;right:120%}.noUi-horizontal .noUi-origin>.noUi-tooltip{transform:translate(50%);left:auto;bottom:10px}.noUi-vertical .noUi-origin>.noUi-tooltip{transform:translateY(-18px);top:auto;right:28px}#resolution-toolbar[data-v-17cb0ead]{align-content:center;position:absolute;width:500px;height:230px;top:10px;right:100px;background-color:#fafafa;z-index:9;box-shadow:0 2px 5px 0 rgba(0,0,0,.36);transition:all .4s;padding-left:30px;padding-right:30px;padding-top:5px;opacity:.9;border-radius:5px}#grid-button[data-v-17cb0ead]{position:absolute;top:10px;right:10px;z-index:9}#grid-resolution-slider[data-v-17cb0ead]{font-size:10px}#grid-hover[data-v-17cb0ead]{position:absolute;top:22.5px;left:1080px;z-index:9}.veeno.noUi-pips.noUi-pips-horizontal[data-v-17cb0ead]{padding:0;left:10px}#bottom-info-bar[data-v-17cb0ead]{z-index:9;bottom:2px;right:50px;position:absolute}.zoomsliderbase[data-v-1a7b3dea]{position:absolute;top:200px;right:35px;z-index:1000;height:300px}.zslidermain[data-v-1a7b3dea]{height:300px}.topleft-dialog[data-v-151188cb]{position:absolute;top:50px;left:50px}.subtitle-1[data-v-151188cb]{margin-left:12px}#box[data-v-151188cb]{height:90px;width:70px;background-color:#e2e2e2;margin-top:30px}.mdl-textfield__input[data-v-151188cb]{width:100px}.bottom-xy[data-v-151188cb]{margin-top:40px}#left-col[data-v-151188cb]{margin-left:10px}#right-col[data-v-151188cb]{margin-top:10px}.v-text-field[data-v-151188cb]{width:100px}#actions-row[data-v-151188cb]{margin-top:10px}.draggable-dialog .text-h5[data-v-151188cb]{cursor:grab}.draggable-dialog .text-h5[data-v-151188cb]:hover{cursor:grabbing}.subtitle-1[data-v-41dfe81a]{margin-left:55px}.heading-6[data-v-41dfe81a]{margin-left:30px}#actions-row[data-v-41dfe81a]{margin-top:50px;margin-left:30px;padding-bottom:10px}.property-drawer-parent[data-v-41dfe81a]{overflow:visible;position:relative}.change-all-drawer[data-v-41dfe81a]{position:absolute;float:left;width:300px;left:225px;z-index:100}.topleft-dialog[data-v-c6cad3e2]{position:absolute;top:50px;left:50px}.subtitle-1[data-v-c6cad3e2]{margin-left:12px}#box[data-v-c6cad3e2]{height:90px;width:70px;background-color:#e2e2e2;margin-top:30px}.mdl-textfield__input[data-v-c6cad3e2]{width:100px}.bottom-xy[data-v-c6cad3e2]{margin-top:40px}#left-col[data-v-c6cad3e2]{margin-left:10px}#right-col[data-v-c6cad3e2]{margin-top:10px}.v-text-field[data-v-c6cad3e2]{width:100px}#actions-row[data-v-c6cad3e2]{margin-top:10px}.draggable-dialog .text-h5[data-v-c6cad3e2]{cursor:grab}.draggable-dialog .text-h5[data-v-c6cad3e2]:hover{cursor:grabbing}#activateMenu[data-v-94aacf7a]{height:10px}#buttonClass[data-v-94aacf7a]{margin-left:15px;margin-top:15px}#showRename[data-v-94aacf7a]{margin-left:20px}#close[data-v-94aacf7a]{margin-top:20px;margin-left:5px}#activateMenu[data-v-7fd25946]{height:10px}#buttonClass[data-v-7fd25946]{margin-left:15px;margin-top:15px}#showRename[data-v-7fd25946]{margin-left:20px}#close[data-v-7fd25946]{margin-top:20px;margin-left:5px}#view-container[data-v-c5eef416]{width:100%;height:100%;overflow-y:hidden}#c[data-v-c5eef416]{z-index:1;position:absolute;left:0;top:0;cursor:default;width:100%;height:100%}#contextMenu[data-v-c5eef416]{position:absolute;z-index:19;background-color:"#fff"}.property-drawer-parent[data-v-20543ec0]{overflow:visible;position:relative}.btn[data-v-20543ec0]{width:100%}#border_import_panel[data-v-180b9f39]{position:relative;top:10px}#file_input[data-v-180b9f39]{position:relative;top:30px}#drop_box[data-v-89ff16ba]{position:relative;top:10px}#dxf_input[data-v-89ff16ba]{position:relative;top:30px}.md-content[data-v-088f6ffc]{width:75px;height:200px;display:inline-flex;justify-content:center;align-items:center}.layerbutton-flow[data-v-088f6ffc]{background-color:#00f;color:#fff}.property-drawer-parent[data-v-420c4732]{overflow:visible;position:relative}.setting-icon-button[data-v-420c4732]{transform:translateX(50%)}.btn[data-v-420c4732]{width:100%}.property-drawer[data-v-420c4732]{position:absolute;float:left;width:500px;left:225px;z-index:100}.property-drawer[data-v-420c4732] .v-messages{display:none}.property-drawer td[data-v-420c4732]{padding:4px}.property-drawer[data-v-420c4732] .v-input__slot{margin:12px 0}.property-drawer[data-v-420c4732] .v-text-field{padding-top:0}.property-drawer[data-v-420c4732] .v-text-field__details{display:none}.property-drawer-parent[data-v-ad2fe0a0]{overflow:visible;position:relative}.btn[data-v-ad2fe0a0]{width:100%}.table[data-v-ad2fe0a0]{width:480px}.d-inline[data-v-ad2fe0a0]{margin-top:20px;margin-left:150px}.d-inline[data-v-ad2fe0a0]:hover{cursor:pointer}.subtitle-1[data-v-ad2fe0a0]{margin-left:12px}.pencil[data-v-ad2fe0a0]{padding-top:15px;padding-left:15px}.connection-property-drawer[data-v-ad2fe0a0]{position:absolute;float:left;width:1000px;left:225px;top:10px;z-index:100}.connection-property-drawer[data-v-ad2fe0a0] .v-messages{display:none}.connection-property-drawer td[data-v-ad2fe0a0]{padding:4px}.connection-property-drawer[data-v-ad2fe0a0] .v-input__slot{margin:12px 0}.connection-property-drawer[data-v-ad2fe0a0] .v-text-field{padding-top:0}.connection-property-drawer[data-v-ad2fe0a0] .v-text-field__details{display:none}.connection-property-drawer .connection-profile[data-v-ad2fe0a0]{margin-top:10px;margin-left:20px;text-align:center}#dropdown[data-v-ad2fe0a0]{margin-top:10px}.image-placeholder[data-v-ad2fe0a0]{margin-left:35px;margin-top:10px}.special.v-text-field.v-input--is-disabled[data-v-ad2fe0a0]{pointer-events:auto}.md-content[data-v-690cc93d]{width:75px;height:200px;display:inline-flex;justify-content:center;align-items:center}#visualizer-slot[data-v-58399cfc]{width:100%;min-height:100vh}.newbox[data-v-2254ac6c]{position:absolute;right:0;width:85vw;height:100vh}#app{font-family:Avenir,Helvetica,Arial,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-align:center;color:#2c3e50;margin-top:60px}body{overflow:hidden;height:100vh}html{-ms-scroll-chaining:none;overscroll-behavior:none} \ No newline at end of file diff --git a/dist/css/chunk-vendors.acfd7f9b.css b/dist/css/chunk-vendors.acfd7f9b.css new file mode 100644 index 00000000..1d2e3393 --- /dev/null +++ b/dist/css/chunk-vendors.acfd7f9b.css @@ -0,0 +1,5 @@ +.v-btn:not(.v-btn--outlined).accent,.v-btn:not(.v-btn--outlined).error,.v-btn:not(.v-btn--outlined).info,.v-btn:not(.v-btn--outlined).primary,.v-btn:not(.v-btn--outlined).secondary,.v-btn:not(.v-btn--outlined).success,.v-btn:not(.v-btn--outlined).warning{color:#fff}.theme--light.v-btn{color:rgba(0,0,0,.87)}.theme--light.v-btn.v-btn--disabled,.theme--light.v-btn.v-btn--disabled .v-btn__loading,.theme--light.v-btn.v-btn--disabled .v-icon{color:rgba(0,0,0,.26)!important}.theme--light.v-btn.v-btn--disabled.v-btn--has-bg{background-color:rgba(0,0,0,.12)!important}.theme--light.v-btn.v-btn--has-bg{background-color:#f5f5f5}.theme--light.v-btn.v-btn--outlined.v-btn--text{border-color:rgba(0,0,0,.12)}.theme--light.v-btn.v-btn--icon{color:rgba(0,0,0,.54)}.theme--light.v-btn:hover:before{opacity:.08}.theme--light.v-btn:focus:before{opacity:.24}.theme--light.v-btn--active:before,.theme--light.v-btn--active:hover:before{opacity:.18}.theme--light.v-btn--active:focus:before{opacity:.16}.theme--dark.v-btn{color:#fff}.theme--dark.v-btn.v-btn--disabled,.theme--dark.v-btn.v-btn--disabled .v-btn__loading,.theme--dark.v-btn.v-btn--disabled .v-icon{color:hsla(0,0%,100%,.3)!important}.theme--dark.v-btn.v-btn--disabled.v-btn--has-bg{background-color:hsla(0,0%,100%,.12)!important}.theme--dark.v-btn.v-btn--has-bg{background-color:#272727}.theme--dark.v-btn.v-btn--outlined.v-btn--text{border-color:hsla(0,0%,100%,.12)}.theme--dark.v-btn.v-btn--icon{color:#fff}.theme--dark.v-btn:hover:before{opacity:.08}.theme--dark.v-btn:focus:before{opacity:.24}.theme--dark.v-btn--active:before,.theme--dark.v-btn--active:hover:before{opacity:.18}.theme--dark.v-btn--active:focus:before{opacity:.32}.v-btn{align-items:center;border-radius:4px;display:inline-flex;flex:0 0 auto;font-weight:500;letter-spacing:.0892857143em;justify-content:center;outline:0;position:relative;text-decoration:none;text-indent:.0892857143em;text-transform:uppercase;transition-duration:.28s;transition-property:box-shadow,transform,opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;vertical-align:middle;white-space:nowrap}.v-btn.v-size--x-small{font-size:.625rem}.v-btn.v-size--small{font-size:.75rem}.v-btn.v-size--default,.v-btn.v-size--large{font-size:.875rem}.v-btn.v-size--x-large{font-size:1rem}.v-btn:before{background-color:currentColor;border-radius:inherit;bottom:0;color:inherit;content:"";left:0;opacity:0;pointer-events:none;position:absolute;right:0;top:0;transition:opacity .2s cubic-bezier(.4,0,.6,1)}.v-btn:not(.v-btn--round).v-size--x-small{height:20px;min-width:36px;padding:0 8.8888888889px}.v-btn:not(.v-btn--round).v-size--small{height:28px;min-width:50px;padding:0 12.4444444444px}.v-btn:not(.v-btn--round).v-size--default{height:36px;min-width:64px;padding:0 16px}.v-btn:not(.v-btn--round).v-size--large{height:44px;min-width:78px;padding:0 19.5555555556px}.v-btn:not(.v-btn--round).v-size--x-large{height:52px;min-width:92px;padding:0 23.1111111111px}.v-btn>.v-btn__content .v-icon{color:inherit}.v-btn__content{align-items:center;color:inherit;display:flex;flex:1 0 auto;justify-content:inherit;line-height:normal;position:relative;transition:inherit;transition-property:opacity}.v-btn__content .v-icon.v-icon--left,.v-btn__content .v-icon.v-icon--right{font-size:18px;height:18px;width:18px}.v-application--is-ltr .v-btn__content .v-icon--left{margin-left:-4px;margin-right:8px}.v-application--is-ltr .v-btn__content .v-icon--right,.v-application--is-rtl .v-btn__content .v-icon--left{margin-left:8px;margin-right:-4px}.v-application--is-rtl .v-btn__content .v-icon--right{margin-left:-4px;margin-right:8px}.v-btn__loader{align-items:center;display:flex;height:100%;justify-content:center;left:0;position:absolute;top:0;width:100%}.v-btn--absolute.v-btn--right,.v-btn--fixed.v-btn--right{right:16px}.v-btn--absolute.v-btn--left,.v-btn--fixed.v-btn--left{left:16px}.v-btn--absolute.v-btn--top,.v-btn--fixed.v-btn--top{top:16px}.v-btn--absolute.v-btn--bottom,.v-btn--fixed.v-btn--bottom{bottom:16px}.v-btn--absolute{position:absolute}.v-btn--fixed{position:fixed}.v-btn--block{display:flex;flex:1 0 auto;min-width:100%!important;max-width:auto}.v-btn--is-elevated{box-shadow:0 3px 1px -2px rgba(0,0,0,.2),0 2px 2px 0 rgba(0,0,0,.14),0 1px 5px 0 rgba(0,0,0,.12)}.v-btn--is-elevated:after{box-shadow:0 2px 4px -1px rgba(0,0,0,.2),0 4px 5px 0 rgba(0,0,0,.14),0 1px 10px 0 rgba(0,0,0,.12)}.v-btn--is-elevated:active{box-shadow:0 5px 5px -3px rgba(0,0,0,.2),0 8px 10px 1px rgba(0,0,0,.14),0 3px 14px 2px rgba(0,0,0,.12)}.v-btn--is-elevated.v-btn--fab{box-shadow:0 3px 5px -1px rgba(0,0,0,.2),0 6px 10px 0 rgba(0,0,0,.14),0 1px 18px 0 rgba(0,0,0,.12)}.v-btn--is-elevated.v-btn--fab:after{box-shadow:0 5px 5px -3px rgba(0,0,0,.2),0 8px 10px 1px rgba(0,0,0,.14),0 3px 14px 2px rgba(0,0,0,.12)}.v-btn--is-elevated.v-btn--fab:active{box-shadow:0 7px 8px -4px rgba(0,0,0,.2),0 12px 17px 2px rgba(0,0,0,.14),0 5px 22px 4px rgba(0,0,0,.12)}.v-btn--disabled{pointer-events:none}.v-btn--fab,.v-btn--icon{min-height:0;min-width:0;padding:0}.v-btn--fab.v-size--x-small .v-icon,.v-btn--icon.v-size--x-small .v-icon{height:18px;font-size:18px;width:18px}.v-btn--fab.v-size--default .v-icon,.v-btn--fab.v-size--small .v-icon,.v-btn--icon.v-size--default .v-icon,.v-btn--icon.v-size--small .v-icon{height:24px;font-size:24px;width:24px}.v-btn--fab.v-size--large .v-icon,.v-btn--icon.v-size--large .v-icon{height:28px;font-size:28px;width:28px}.v-btn--fab.v-size--x-large .v-icon,.v-btn--icon.v-size--x-large .v-icon{height:32px;font-size:32px;width:32px}.v-btn--icon.v-size--x-small{height:20px;width:20px}.v-btn--icon.v-size--small{height:28px;width:28px}.v-btn--icon.v-size--default{height:36px;width:36px}.v-btn--icon.v-size--large{height:44px;width:44px}.v-btn--icon.v-size--x-large{height:52px;width:52px}.v-btn--fab.v-btn--absolute,.v-btn--fab.v-btn--fixed{z-index:4}.v-btn--fab.v-size--x-small{height:32px;width:32px}.v-btn--fab.v-size--x-small.v-btn--absolute.v-btn--bottom{bottom:-16px}.v-btn--fab.v-size--x-small.v-btn--absolute.v-btn--top{top:-16px}.v-btn--fab.v-size--small{height:40px;width:40px}.v-btn--fab.v-size--small.v-btn--absolute.v-btn--bottom{bottom:-20px}.v-btn--fab.v-size--small.v-btn--absolute.v-btn--top{top:-20px}.v-btn--fab.v-size--default{height:56px;width:56px}.v-btn--fab.v-size--default.v-btn--absolute.v-btn--bottom{bottom:-28px}.v-btn--fab.v-size--default.v-btn--absolute.v-btn--top{top:-28px}.v-btn--fab.v-size--large{height:64px;width:64px}.v-btn--fab.v-size--large.v-btn--absolute.v-btn--bottom{bottom:-32px}.v-btn--fab.v-size--large.v-btn--absolute.v-btn--top{top:-32px}.v-btn--fab.v-size--x-large{height:72px;width:72px}.v-btn--fab.v-size--x-large.v-btn--absolute.v-btn--bottom{bottom:-36px}.v-btn--fab.v-size--x-large.v-btn--absolute.v-btn--top{top:-36px}.v-btn--loading{pointer-events:none;transition:none}.v-btn--loading .v-btn__content{opacity:0}.v-btn--outlined{border:thin solid currentColor}.v-btn--plain:before{display:none}.v-btn--plain:not(.v-btn--active):not(.v-btn--loading):not(:focus):not(:hover) .v-btn__content{opacity:.62}.v-btn--round{border-radius:50%}.v-btn--rounded{border-radius:28px}.v-btn--tile{border-radius:0}.theme--light.v-sheet{background-color:#fff;border-color:#fff;color:rgba(0,0,0,.87)}.theme--light.v-sheet--outlined{border:thin solid rgba(0,0,0,.12)}.theme--dark.v-sheet{background-color:#1e1e1e;border-color:#1e1e1e;color:#fff}.theme--dark.v-sheet--outlined{border:thin solid hsla(0,0%,100%,.12)}.v-sheet{border-radius:0}.v-sheet:not(.v-sheet--outlined){box-shadow:0 0 0 0 rgba(0,0,0,.2),0 0 0 0 rgba(0,0,0,.14),0 0 0 0 rgba(0,0,0,.12)}.v-sheet.v-sheet--shaped{border-radius:24px 0}@keyframes v-shake{59%{margin-left:0}60%,80%{margin-left:2px}70%,90%{margin-left:-2px}}.v-application .black{background-color:#000!important;border-color:#000!important}.v-application .black--text{color:#000!important;caret-color:#000!important}.v-application .white{background-color:#fff!important;border-color:#fff!important}.v-application .white--text{color:#fff!important;caret-color:#fff!important}.v-application .transparent{background-color:transparent!important;border-color:transparent!important}.v-application .transparent--text{color:transparent!important;caret-color:transparent!important}.v-application .red{background-color:#f44336!important;border-color:#f44336!important}.v-application .red--text{color:#f44336!important;caret-color:#f44336!important}.v-application .red.lighten-5{background-color:#ffebee!important;border-color:#ffebee!important}.v-application .red--text.text--lighten-5{color:#ffebee!important;caret-color:#ffebee!important}.v-application .red.lighten-4{background-color:#ffcdd2!important;border-color:#ffcdd2!important}.v-application .red--text.text--lighten-4{color:#ffcdd2!important;caret-color:#ffcdd2!important}.v-application .red.lighten-3{background-color:#ef9a9a!important;border-color:#ef9a9a!important}.v-application .red--text.text--lighten-3{color:#ef9a9a!important;caret-color:#ef9a9a!important}.v-application .red.lighten-2{background-color:#e57373!important;border-color:#e57373!important}.v-application .red--text.text--lighten-2{color:#e57373!important;caret-color:#e57373!important}.v-application .red.lighten-1{background-color:#ef5350!important;border-color:#ef5350!important}.v-application .red--text.text--lighten-1{color:#ef5350!important;caret-color:#ef5350!important}.v-application .red.darken-1{background-color:#e53935!important;border-color:#e53935!important}.v-application .red--text.text--darken-1{color:#e53935!important;caret-color:#e53935!important}.v-application .red.darken-2{background-color:#d32f2f!important;border-color:#d32f2f!important}.v-application .red--text.text--darken-2{color:#d32f2f!important;caret-color:#d32f2f!important}.v-application .red.darken-3{background-color:#c62828!important;border-color:#c62828!important}.v-application .red--text.text--darken-3{color:#c62828!important;caret-color:#c62828!important}.v-application .red.darken-4{background-color:#b71c1c!important;border-color:#b71c1c!important}.v-application .red--text.text--darken-4{color:#b71c1c!important;caret-color:#b71c1c!important}.v-application .red.accent-1{background-color:#ff8a80!important;border-color:#ff8a80!important}.v-application .red--text.text--accent-1{color:#ff8a80!important;caret-color:#ff8a80!important}.v-application .red.accent-2{background-color:#ff5252!important;border-color:#ff5252!important}.v-application .red--text.text--accent-2{color:#ff5252!important;caret-color:#ff5252!important}.v-application .red.accent-3{background-color:#ff1744!important;border-color:#ff1744!important}.v-application .red--text.text--accent-3{color:#ff1744!important;caret-color:#ff1744!important}.v-application .red.accent-4{background-color:#d50000!important;border-color:#d50000!important}.v-application .red--text.text--accent-4{color:#d50000!important;caret-color:#d50000!important}.v-application .pink{background-color:#e91e63!important;border-color:#e91e63!important}.v-application .pink--text{color:#e91e63!important;caret-color:#e91e63!important}.v-application .pink.lighten-5{background-color:#fce4ec!important;border-color:#fce4ec!important}.v-application .pink--text.text--lighten-5{color:#fce4ec!important;caret-color:#fce4ec!important}.v-application .pink.lighten-4{background-color:#f8bbd0!important;border-color:#f8bbd0!important}.v-application .pink--text.text--lighten-4{color:#f8bbd0!important;caret-color:#f8bbd0!important}.v-application .pink.lighten-3{background-color:#f48fb1!important;border-color:#f48fb1!important}.v-application .pink--text.text--lighten-3{color:#f48fb1!important;caret-color:#f48fb1!important}.v-application .pink.lighten-2{background-color:#f06292!important;border-color:#f06292!important}.v-application .pink--text.text--lighten-2{color:#f06292!important;caret-color:#f06292!important}.v-application .pink.lighten-1{background-color:#ec407a!important;border-color:#ec407a!important}.v-application .pink--text.text--lighten-1{color:#ec407a!important;caret-color:#ec407a!important}.v-application .pink.darken-1{background-color:#d81b60!important;border-color:#d81b60!important}.v-application .pink--text.text--darken-1{color:#d81b60!important;caret-color:#d81b60!important}.v-application .pink.darken-2{background-color:#c2185b!important;border-color:#c2185b!important}.v-application .pink--text.text--darken-2{color:#c2185b!important;caret-color:#c2185b!important}.v-application .pink.darken-3{background-color:#ad1457!important;border-color:#ad1457!important}.v-application .pink--text.text--darken-3{color:#ad1457!important;caret-color:#ad1457!important}.v-application .pink.darken-4{background-color:#880e4f!important;border-color:#880e4f!important}.v-application .pink--text.text--darken-4{color:#880e4f!important;caret-color:#880e4f!important}.v-application .pink.accent-1{background-color:#ff80ab!important;border-color:#ff80ab!important}.v-application .pink--text.text--accent-1{color:#ff80ab!important;caret-color:#ff80ab!important}.v-application .pink.accent-2{background-color:#ff4081!important;border-color:#ff4081!important}.v-application .pink--text.text--accent-2{color:#ff4081!important;caret-color:#ff4081!important}.v-application .pink.accent-3{background-color:#f50057!important;border-color:#f50057!important}.v-application .pink--text.text--accent-3{color:#f50057!important;caret-color:#f50057!important}.v-application .pink.accent-4{background-color:#c51162!important;border-color:#c51162!important}.v-application .pink--text.text--accent-4{color:#c51162!important;caret-color:#c51162!important}.v-application .purple{background-color:#9c27b0!important;border-color:#9c27b0!important}.v-application .purple--text{color:#9c27b0!important;caret-color:#9c27b0!important}.v-application .purple.lighten-5{background-color:#f3e5f5!important;border-color:#f3e5f5!important}.v-application .purple--text.text--lighten-5{color:#f3e5f5!important;caret-color:#f3e5f5!important}.v-application .purple.lighten-4{background-color:#e1bee7!important;border-color:#e1bee7!important}.v-application .purple--text.text--lighten-4{color:#e1bee7!important;caret-color:#e1bee7!important}.v-application .purple.lighten-3{background-color:#ce93d8!important;border-color:#ce93d8!important}.v-application .purple--text.text--lighten-3{color:#ce93d8!important;caret-color:#ce93d8!important}.v-application .purple.lighten-2{background-color:#ba68c8!important;border-color:#ba68c8!important}.v-application .purple--text.text--lighten-2{color:#ba68c8!important;caret-color:#ba68c8!important}.v-application .purple.lighten-1{background-color:#ab47bc!important;border-color:#ab47bc!important}.v-application .purple--text.text--lighten-1{color:#ab47bc!important;caret-color:#ab47bc!important}.v-application .purple.darken-1{background-color:#8e24aa!important;border-color:#8e24aa!important}.v-application .purple--text.text--darken-1{color:#8e24aa!important;caret-color:#8e24aa!important}.v-application .purple.darken-2{background-color:#7b1fa2!important;border-color:#7b1fa2!important}.v-application .purple--text.text--darken-2{color:#7b1fa2!important;caret-color:#7b1fa2!important}.v-application .purple.darken-3{background-color:#6a1b9a!important;border-color:#6a1b9a!important}.v-application .purple--text.text--darken-3{color:#6a1b9a!important;caret-color:#6a1b9a!important}.v-application .purple.darken-4{background-color:#4a148c!important;border-color:#4a148c!important}.v-application .purple--text.text--darken-4{color:#4a148c!important;caret-color:#4a148c!important}.v-application .purple.accent-1{background-color:#ea80fc!important;border-color:#ea80fc!important}.v-application .purple--text.text--accent-1{color:#ea80fc!important;caret-color:#ea80fc!important}.v-application .purple.accent-2{background-color:#e040fb!important;border-color:#e040fb!important}.v-application .purple--text.text--accent-2{color:#e040fb!important;caret-color:#e040fb!important}.v-application .purple.accent-3{background-color:#d500f9!important;border-color:#d500f9!important}.v-application .purple--text.text--accent-3{color:#d500f9!important;caret-color:#d500f9!important}.v-application .purple.accent-4{background-color:#a0f!important;border-color:#a0f!important}.v-application .purple--text.text--accent-4{color:#a0f!important;caret-color:#a0f!important}.v-application .deep-purple{background-color:#673ab7!important;border-color:#673ab7!important}.v-application .deep-purple--text{color:#673ab7!important;caret-color:#673ab7!important}.v-application .deep-purple.lighten-5{background-color:#ede7f6!important;border-color:#ede7f6!important}.v-application .deep-purple--text.text--lighten-5{color:#ede7f6!important;caret-color:#ede7f6!important}.v-application .deep-purple.lighten-4{background-color:#d1c4e9!important;border-color:#d1c4e9!important}.v-application .deep-purple--text.text--lighten-4{color:#d1c4e9!important;caret-color:#d1c4e9!important}.v-application .deep-purple.lighten-3{background-color:#b39ddb!important;border-color:#b39ddb!important}.v-application .deep-purple--text.text--lighten-3{color:#b39ddb!important;caret-color:#b39ddb!important}.v-application .deep-purple.lighten-2{background-color:#9575cd!important;border-color:#9575cd!important}.v-application .deep-purple--text.text--lighten-2{color:#9575cd!important;caret-color:#9575cd!important}.v-application .deep-purple.lighten-1{background-color:#7e57c2!important;border-color:#7e57c2!important}.v-application .deep-purple--text.text--lighten-1{color:#7e57c2!important;caret-color:#7e57c2!important}.v-application .deep-purple.darken-1{background-color:#5e35b1!important;border-color:#5e35b1!important}.v-application .deep-purple--text.text--darken-1{color:#5e35b1!important;caret-color:#5e35b1!important}.v-application .deep-purple.darken-2{background-color:#512da8!important;border-color:#512da8!important}.v-application .deep-purple--text.text--darken-2{color:#512da8!important;caret-color:#512da8!important}.v-application .deep-purple.darken-3{background-color:#4527a0!important;border-color:#4527a0!important}.v-application .deep-purple--text.text--darken-3{color:#4527a0!important;caret-color:#4527a0!important}.v-application .deep-purple.darken-4{background-color:#311b92!important;border-color:#311b92!important}.v-application .deep-purple--text.text--darken-4{color:#311b92!important;caret-color:#311b92!important}.v-application .deep-purple.accent-1{background-color:#b388ff!important;border-color:#b388ff!important}.v-application .deep-purple--text.text--accent-1{color:#b388ff!important;caret-color:#b388ff!important}.v-application .deep-purple.accent-2{background-color:#7c4dff!important;border-color:#7c4dff!important}.v-application .deep-purple--text.text--accent-2{color:#7c4dff!important;caret-color:#7c4dff!important}.v-application .deep-purple.accent-3{background-color:#651fff!important;border-color:#651fff!important}.v-application .deep-purple--text.text--accent-3{color:#651fff!important;caret-color:#651fff!important}.v-application .deep-purple.accent-4{background-color:#6200ea!important;border-color:#6200ea!important}.v-application .deep-purple--text.text--accent-4{color:#6200ea!important;caret-color:#6200ea!important}.v-application .indigo{background-color:#3f51b5!important;border-color:#3f51b5!important}.v-application .indigo--text{color:#3f51b5!important;caret-color:#3f51b5!important}.v-application .indigo.lighten-5{background-color:#e8eaf6!important;border-color:#e8eaf6!important}.v-application .indigo--text.text--lighten-5{color:#e8eaf6!important;caret-color:#e8eaf6!important}.v-application .indigo.lighten-4{background-color:#c5cae9!important;border-color:#c5cae9!important}.v-application .indigo--text.text--lighten-4{color:#c5cae9!important;caret-color:#c5cae9!important}.v-application .indigo.lighten-3{background-color:#9fa8da!important;border-color:#9fa8da!important}.v-application .indigo--text.text--lighten-3{color:#9fa8da!important;caret-color:#9fa8da!important}.v-application .indigo.lighten-2{background-color:#7986cb!important;border-color:#7986cb!important}.v-application .indigo--text.text--lighten-2{color:#7986cb!important;caret-color:#7986cb!important}.v-application .indigo.lighten-1{background-color:#5c6bc0!important;border-color:#5c6bc0!important}.v-application .indigo--text.text--lighten-1{color:#5c6bc0!important;caret-color:#5c6bc0!important}.v-application .indigo.darken-1{background-color:#3949ab!important;border-color:#3949ab!important}.v-application .indigo--text.text--darken-1{color:#3949ab!important;caret-color:#3949ab!important}.v-application .indigo.darken-2{background-color:#303f9f!important;border-color:#303f9f!important}.v-application .indigo--text.text--darken-2{color:#303f9f!important;caret-color:#303f9f!important}.v-application .indigo.darken-3{background-color:#283593!important;border-color:#283593!important}.v-application .indigo--text.text--darken-3{color:#283593!important;caret-color:#283593!important}.v-application .indigo.darken-4{background-color:#1a237e!important;border-color:#1a237e!important}.v-application .indigo--text.text--darken-4{color:#1a237e!important;caret-color:#1a237e!important}.v-application .indigo.accent-1{background-color:#8c9eff!important;border-color:#8c9eff!important}.v-application .indigo--text.text--accent-1{color:#8c9eff!important;caret-color:#8c9eff!important}.v-application .indigo.accent-2{background-color:#536dfe!important;border-color:#536dfe!important}.v-application .indigo--text.text--accent-2{color:#536dfe!important;caret-color:#536dfe!important}.v-application .indigo.accent-3{background-color:#3d5afe!important;border-color:#3d5afe!important}.v-application .indigo--text.text--accent-3{color:#3d5afe!important;caret-color:#3d5afe!important}.v-application .indigo.accent-4{background-color:#304ffe!important;border-color:#304ffe!important}.v-application .indigo--text.text--accent-4{color:#304ffe!important;caret-color:#304ffe!important}.v-application .blue{background-color:#2196f3!important;border-color:#2196f3!important}.v-application .blue--text{color:#2196f3!important;caret-color:#2196f3!important}.v-application .blue.lighten-5{background-color:#e3f2fd!important;border-color:#e3f2fd!important}.v-application .blue--text.text--lighten-5{color:#e3f2fd!important;caret-color:#e3f2fd!important}.v-application .blue.lighten-4{background-color:#bbdefb!important;border-color:#bbdefb!important}.v-application .blue--text.text--lighten-4{color:#bbdefb!important;caret-color:#bbdefb!important}.v-application .blue.lighten-3{background-color:#90caf9!important;border-color:#90caf9!important}.v-application .blue--text.text--lighten-3{color:#90caf9!important;caret-color:#90caf9!important}.v-application .blue.lighten-2{background-color:#64b5f6!important;border-color:#64b5f6!important}.v-application .blue--text.text--lighten-2{color:#64b5f6!important;caret-color:#64b5f6!important}.v-application .blue.lighten-1{background-color:#42a5f5!important;border-color:#42a5f5!important}.v-application .blue--text.text--lighten-1{color:#42a5f5!important;caret-color:#42a5f5!important}.v-application .blue.darken-1{background-color:#1e88e5!important;border-color:#1e88e5!important}.v-application .blue--text.text--darken-1{color:#1e88e5!important;caret-color:#1e88e5!important}.v-application .blue.darken-2{background-color:#1976d2!important;border-color:#1976d2!important}.v-application .blue--text.text--darken-2{color:#1976d2!important;caret-color:#1976d2!important}.v-application .blue.darken-3{background-color:#1565c0!important;border-color:#1565c0!important}.v-application .blue--text.text--darken-3{color:#1565c0!important;caret-color:#1565c0!important}.v-application .blue.darken-4{background-color:#0d47a1!important;border-color:#0d47a1!important}.v-application .blue--text.text--darken-4{color:#0d47a1!important;caret-color:#0d47a1!important}.v-application .blue.accent-1{background-color:#82b1ff!important;border-color:#82b1ff!important}.v-application .blue--text.text--accent-1{color:#82b1ff!important;caret-color:#82b1ff!important}.v-application .blue.accent-2{background-color:#448aff!important;border-color:#448aff!important}.v-application .blue--text.text--accent-2{color:#448aff!important;caret-color:#448aff!important}.v-application .blue.accent-3{background-color:#2979ff!important;border-color:#2979ff!important}.v-application .blue--text.text--accent-3{color:#2979ff!important;caret-color:#2979ff!important}.v-application .blue.accent-4{background-color:#2962ff!important;border-color:#2962ff!important}.v-application .blue--text.text--accent-4{color:#2962ff!important;caret-color:#2962ff!important}.v-application .light-blue{background-color:#03a9f4!important;border-color:#03a9f4!important}.v-application .light-blue--text{color:#03a9f4!important;caret-color:#03a9f4!important}.v-application .light-blue.lighten-5{background-color:#e1f5fe!important;border-color:#e1f5fe!important}.v-application .light-blue--text.text--lighten-5{color:#e1f5fe!important;caret-color:#e1f5fe!important}.v-application .light-blue.lighten-4{background-color:#b3e5fc!important;border-color:#b3e5fc!important}.v-application .light-blue--text.text--lighten-4{color:#b3e5fc!important;caret-color:#b3e5fc!important}.v-application .light-blue.lighten-3{background-color:#81d4fa!important;border-color:#81d4fa!important}.v-application .light-blue--text.text--lighten-3{color:#81d4fa!important;caret-color:#81d4fa!important}.v-application .light-blue.lighten-2{background-color:#4fc3f7!important;border-color:#4fc3f7!important}.v-application .light-blue--text.text--lighten-2{color:#4fc3f7!important;caret-color:#4fc3f7!important}.v-application .light-blue.lighten-1{background-color:#29b6f6!important;border-color:#29b6f6!important}.v-application .light-blue--text.text--lighten-1{color:#29b6f6!important;caret-color:#29b6f6!important}.v-application .light-blue.darken-1{background-color:#039be5!important;border-color:#039be5!important}.v-application .light-blue--text.text--darken-1{color:#039be5!important;caret-color:#039be5!important}.v-application .light-blue.darken-2{background-color:#0288d1!important;border-color:#0288d1!important}.v-application .light-blue--text.text--darken-2{color:#0288d1!important;caret-color:#0288d1!important}.v-application .light-blue.darken-3{background-color:#0277bd!important;border-color:#0277bd!important}.v-application .light-blue--text.text--darken-3{color:#0277bd!important;caret-color:#0277bd!important}.v-application .light-blue.darken-4{background-color:#01579b!important;border-color:#01579b!important}.v-application .light-blue--text.text--darken-4{color:#01579b!important;caret-color:#01579b!important}.v-application .light-blue.accent-1{background-color:#80d8ff!important;border-color:#80d8ff!important}.v-application .light-blue--text.text--accent-1{color:#80d8ff!important;caret-color:#80d8ff!important}.v-application .light-blue.accent-2{background-color:#40c4ff!important;border-color:#40c4ff!important}.v-application .light-blue--text.text--accent-2{color:#40c4ff!important;caret-color:#40c4ff!important}.v-application .light-blue.accent-3{background-color:#00b0ff!important;border-color:#00b0ff!important}.v-application .light-blue--text.text--accent-3{color:#00b0ff!important;caret-color:#00b0ff!important}.v-application .light-blue.accent-4{background-color:#0091ea!important;border-color:#0091ea!important}.v-application .light-blue--text.text--accent-4{color:#0091ea!important;caret-color:#0091ea!important}.v-application .cyan{background-color:#00bcd4!important;border-color:#00bcd4!important}.v-application .cyan--text{color:#00bcd4!important;caret-color:#00bcd4!important}.v-application .cyan.lighten-5{background-color:#e0f7fa!important;border-color:#e0f7fa!important}.v-application .cyan--text.text--lighten-5{color:#e0f7fa!important;caret-color:#e0f7fa!important}.v-application .cyan.lighten-4{background-color:#b2ebf2!important;border-color:#b2ebf2!important}.v-application .cyan--text.text--lighten-4{color:#b2ebf2!important;caret-color:#b2ebf2!important}.v-application .cyan.lighten-3{background-color:#80deea!important;border-color:#80deea!important}.v-application .cyan--text.text--lighten-3{color:#80deea!important;caret-color:#80deea!important}.v-application .cyan.lighten-2{background-color:#4dd0e1!important;border-color:#4dd0e1!important}.v-application .cyan--text.text--lighten-2{color:#4dd0e1!important;caret-color:#4dd0e1!important}.v-application .cyan.lighten-1{background-color:#26c6da!important;border-color:#26c6da!important}.v-application .cyan--text.text--lighten-1{color:#26c6da!important;caret-color:#26c6da!important}.v-application .cyan.darken-1{background-color:#00acc1!important;border-color:#00acc1!important}.v-application .cyan--text.text--darken-1{color:#00acc1!important;caret-color:#00acc1!important}.v-application .cyan.darken-2{background-color:#0097a7!important;border-color:#0097a7!important}.v-application .cyan--text.text--darken-2{color:#0097a7!important;caret-color:#0097a7!important}.v-application .cyan.darken-3{background-color:#00838f!important;border-color:#00838f!important}.v-application .cyan--text.text--darken-3{color:#00838f!important;caret-color:#00838f!important}.v-application .cyan.darken-4{background-color:#006064!important;border-color:#006064!important}.v-application .cyan--text.text--darken-4{color:#006064!important;caret-color:#006064!important}.v-application .cyan.accent-1{background-color:#84ffff!important;border-color:#84ffff!important}.v-application .cyan--text.text--accent-1{color:#84ffff!important;caret-color:#84ffff!important}.v-application .cyan.accent-2{background-color:#18ffff!important;border-color:#18ffff!important}.v-application .cyan--text.text--accent-2{color:#18ffff!important;caret-color:#18ffff!important}.v-application .cyan.accent-3{background-color:#00e5ff!important;border-color:#00e5ff!important}.v-application .cyan--text.text--accent-3{color:#00e5ff!important;caret-color:#00e5ff!important}.v-application .cyan.accent-4{background-color:#00b8d4!important;border-color:#00b8d4!important}.v-application .cyan--text.text--accent-4{color:#00b8d4!important;caret-color:#00b8d4!important}.v-application .teal{background-color:#009688!important;border-color:#009688!important}.v-application .teal--text{color:#009688!important;caret-color:#009688!important}.v-application .teal.lighten-5{background-color:#e0f2f1!important;border-color:#e0f2f1!important}.v-application .teal--text.text--lighten-5{color:#e0f2f1!important;caret-color:#e0f2f1!important}.v-application .teal.lighten-4{background-color:#b2dfdb!important;border-color:#b2dfdb!important}.v-application .teal--text.text--lighten-4{color:#b2dfdb!important;caret-color:#b2dfdb!important}.v-application .teal.lighten-3{background-color:#80cbc4!important;border-color:#80cbc4!important}.v-application .teal--text.text--lighten-3{color:#80cbc4!important;caret-color:#80cbc4!important}.v-application .teal.lighten-2{background-color:#4db6ac!important;border-color:#4db6ac!important}.v-application .teal--text.text--lighten-2{color:#4db6ac!important;caret-color:#4db6ac!important}.v-application .teal.lighten-1{background-color:#26a69a!important;border-color:#26a69a!important}.v-application .teal--text.text--lighten-1{color:#26a69a!important;caret-color:#26a69a!important}.v-application .teal.darken-1{background-color:#00897b!important;border-color:#00897b!important}.v-application .teal--text.text--darken-1{color:#00897b!important;caret-color:#00897b!important}.v-application .teal.darken-2{background-color:#00796b!important;border-color:#00796b!important}.v-application .teal--text.text--darken-2{color:#00796b!important;caret-color:#00796b!important}.v-application .teal.darken-3{background-color:#00695c!important;border-color:#00695c!important}.v-application .teal--text.text--darken-3{color:#00695c!important;caret-color:#00695c!important}.v-application .teal.darken-4{background-color:#004d40!important;border-color:#004d40!important}.v-application .teal--text.text--darken-4{color:#004d40!important;caret-color:#004d40!important}.v-application .teal.accent-1{background-color:#a7ffeb!important;border-color:#a7ffeb!important}.v-application .teal--text.text--accent-1{color:#a7ffeb!important;caret-color:#a7ffeb!important}.v-application .teal.accent-2{background-color:#64ffda!important;border-color:#64ffda!important}.v-application .teal--text.text--accent-2{color:#64ffda!important;caret-color:#64ffda!important}.v-application .teal.accent-3{background-color:#1de9b6!important;border-color:#1de9b6!important}.v-application .teal--text.text--accent-3{color:#1de9b6!important;caret-color:#1de9b6!important}.v-application .teal.accent-4{background-color:#00bfa5!important;border-color:#00bfa5!important}.v-application .teal--text.text--accent-4{color:#00bfa5!important;caret-color:#00bfa5!important}.v-application .green{background-color:#4caf50!important;border-color:#4caf50!important}.v-application .green--text{color:#4caf50!important;caret-color:#4caf50!important}.v-application .green.lighten-5{background-color:#e8f5e9!important;border-color:#e8f5e9!important}.v-application .green--text.text--lighten-5{color:#e8f5e9!important;caret-color:#e8f5e9!important}.v-application .green.lighten-4{background-color:#c8e6c9!important;border-color:#c8e6c9!important}.v-application .green--text.text--lighten-4{color:#c8e6c9!important;caret-color:#c8e6c9!important}.v-application .green.lighten-3{background-color:#a5d6a7!important;border-color:#a5d6a7!important}.v-application .green--text.text--lighten-3{color:#a5d6a7!important;caret-color:#a5d6a7!important}.v-application .green.lighten-2{background-color:#81c784!important;border-color:#81c784!important}.v-application .green--text.text--lighten-2{color:#81c784!important;caret-color:#81c784!important}.v-application .green.lighten-1{background-color:#66bb6a!important;border-color:#66bb6a!important}.v-application .green--text.text--lighten-1{color:#66bb6a!important;caret-color:#66bb6a!important}.v-application .green.darken-1{background-color:#43a047!important;border-color:#43a047!important}.v-application .green--text.text--darken-1{color:#43a047!important;caret-color:#43a047!important}.v-application .green.darken-2{background-color:#388e3c!important;border-color:#388e3c!important}.v-application .green--text.text--darken-2{color:#388e3c!important;caret-color:#388e3c!important}.v-application .green.darken-3{background-color:#2e7d32!important;border-color:#2e7d32!important}.v-application .green--text.text--darken-3{color:#2e7d32!important;caret-color:#2e7d32!important}.v-application .green.darken-4{background-color:#1b5e20!important;border-color:#1b5e20!important}.v-application .green--text.text--darken-4{color:#1b5e20!important;caret-color:#1b5e20!important}.v-application .green.accent-1{background-color:#b9f6ca!important;border-color:#b9f6ca!important}.v-application .green--text.text--accent-1{color:#b9f6ca!important;caret-color:#b9f6ca!important}.v-application .green.accent-2{background-color:#69f0ae!important;border-color:#69f0ae!important}.v-application .green--text.text--accent-2{color:#69f0ae!important;caret-color:#69f0ae!important}.v-application .green.accent-3{background-color:#00e676!important;border-color:#00e676!important}.v-application .green--text.text--accent-3{color:#00e676!important;caret-color:#00e676!important}.v-application .green.accent-4{background-color:#00c853!important;border-color:#00c853!important}.v-application .green--text.text--accent-4{color:#00c853!important;caret-color:#00c853!important}.v-application .light-green{background-color:#8bc34a!important;border-color:#8bc34a!important}.v-application .light-green--text{color:#8bc34a!important;caret-color:#8bc34a!important}.v-application .light-green.lighten-5{background-color:#f1f8e9!important;border-color:#f1f8e9!important}.v-application .light-green--text.text--lighten-5{color:#f1f8e9!important;caret-color:#f1f8e9!important}.v-application .light-green.lighten-4{background-color:#dcedc8!important;border-color:#dcedc8!important}.v-application .light-green--text.text--lighten-4{color:#dcedc8!important;caret-color:#dcedc8!important}.v-application .light-green.lighten-3{background-color:#c5e1a5!important;border-color:#c5e1a5!important}.v-application .light-green--text.text--lighten-3{color:#c5e1a5!important;caret-color:#c5e1a5!important}.v-application .light-green.lighten-2{background-color:#aed581!important;border-color:#aed581!important}.v-application .light-green--text.text--lighten-2{color:#aed581!important;caret-color:#aed581!important}.v-application .light-green.lighten-1{background-color:#9ccc65!important;border-color:#9ccc65!important}.v-application .light-green--text.text--lighten-1{color:#9ccc65!important;caret-color:#9ccc65!important}.v-application .light-green.darken-1{background-color:#7cb342!important;border-color:#7cb342!important}.v-application .light-green--text.text--darken-1{color:#7cb342!important;caret-color:#7cb342!important}.v-application .light-green.darken-2{background-color:#689f38!important;border-color:#689f38!important}.v-application .light-green--text.text--darken-2{color:#689f38!important;caret-color:#689f38!important}.v-application .light-green.darken-3{background-color:#558b2f!important;border-color:#558b2f!important}.v-application .light-green--text.text--darken-3{color:#558b2f!important;caret-color:#558b2f!important}.v-application .light-green.darken-4{background-color:#33691e!important;border-color:#33691e!important}.v-application .light-green--text.text--darken-4{color:#33691e!important;caret-color:#33691e!important}.v-application .light-green.accent-1{background-color:#ccff90!important;border-color:#ccff90!important}.v-application .light-green--text.text--accent-1{color:#ccff90!important;caret-color:#ccff90!important}.v-application .light-green.accent-2{background-color:#b2ff59!important;border-color:#b2ff59!important}.v-application .light-green--text.text--accent-2{color:#b2ff59!important;caret-color:#b2ff59!important}.v-application .light-green.accent-3{background-color:#76ff03!important;border-color:#76ff03!important}.v-application .light-green--text.text--accent-3{color:#76ff03!important;caret-color:#76ff03!important}.v-application .light-green.accent-4{background-color:#64dd17!important;border-color:#64dd17!important}.v-application .light-green--text.text--accent-4{color:#64dd17!important;caret-color:#64dd17!important}.v-application .lime{background-color:#cddc39!important;border-color:#cddc39!important}.v-application .lime--text{color:#cddc39!important;caret-color:#cddc39!important}.v-application .lime.lighten-5{background-color:#f9fbe7!important;border-color:#f9fbe7!important}.v-application .lime--text.text--lighten-5{color:#f9fbe7!important;caret-color:#f9fbe7!important}.v-application .lime.lighten-4{background-color:#f0f4c3!important;border-color:#f0f4c3!important}.v-application .lime--text.text--lighten-4{color:#f0f4c3!important;caret-color:#f0f4c3!important}.v-application .lime.lighten-3{background-color:#e6ee9c!important;border-color:#e6ee9c!important}.v-application .lime--text.text--lighten-3{color:#e6ee9c!important;caret-color:#e6ee9c!important}.v-application .lime.lighten-2{background-color:#dce775!important;border-color:#dce775!important}.v-application .lime--text.text--lighten-2{color:#dce775!important;caret-color:#dce775!important}.v-application .lime.lighten-1{background-color:#d4e157!important;border-color:#d4e157!important}.v-application .lime--text.text--lighten-1{color:#d4e157!important;caret-color:#d4e157!important}.v-application .lime.darken-1{background-color:#c0ca33!important;border-color:#c0ca33!important}.v-application .lime--text.text--darken-1{color:#c0ca33!important;caret-color:#c0ca33!important}.v-application .lime.darken-2{background-color:#afb42b!important;border-color:#afb42b!important}.v-application .lime--text.text--darken-2{color:#afb42b!important;caret-color:#afb42b!important}.v-application .lime.darken-3{background-color:#9e9d24!important;border-color:#9e9d24!important}.v-application .lime--text.text--darken-3{color:#9e9d24!important;caret-color:#9e9d24!important}.v-application .lime.darken-4{background-color:#827717!important;border-color:#827717!important}.v-application .lime--text.text--darken-4{color:#827717!important;caret-color:#827717!important}.v-application .lime.accent-1{background-color:#f4ff81!important;border-color:#f4ff81!important}.v-application .lime--text.text--accent-1{color:#f4ff81!important;caret-color:#f4ff81!important}.v-application .lime.accent-2{background-color:#eeff41!important;border-color:#eeff41!important}.v-application .lime--text.text--accent-2{color:#eeff41!important;caret-color:#eeff41!important}.v-application .lime.accent-3{background-color:#c6ff00!important;border-color:#c6ff00!important}.v-application .lime--text.text--accent-3{color:#c6ff00!important;caret-color:#c6ff00!important}.v-application .lime.accent-4{background-color:#aeea00!important;border-color:#aeea00!important}.v-application .lime--text.text--accent-4{color:#aeea00!important;caret-color:#aeea00!important}.v-application .yellow{background-color:#ffeb3b!important;border-color:#ffeb3b!important}.v-application .yellow--text{color:#ffeb3b!important;caret-color:#ffeb3b!important}.v-application .yellow.lighten-5{background-color:#fffde7!important;border-color:#fffde7!important}.v-application .yellow--text.text--lighten-5{color:#fffde7!important;caret-color:#fffde7!important}.v-application .yellow.lighten-4{background-color:#fff9c4!important;border-color:#fff9c4!important}.v-application .yellow--text.text--lighten-4{color:#fff9c4!important;caret-color:#fff9c4!important}.v-application .yellow.lighten-3{background-color:#fff59d!important;border-color:#fff59d!important}.v-application .yellow--text.text--lighten-3{color:#fff59d!important;caret-color:#fff59d!important}.v-application .yellow.lighten-2{background-color:#fff176!important;border-color:#fff176!important}.v-application .yellow--text.text--lighten-2{color:#fff176!important;caret-color:#fff176!important}.v-application .yellow.lighten-1{background-color:#ffee58!important;border-color:#ffee58!important}.v-application .yellow--text.text--lighten-1{color:#ffee58!important;caret-color:#ffee58!important}.v-application .yellow.darken-1{background-color:#fdd835!important;border-color:#fdd835!important}.v-application .yellow--text.text--darken-1{color:#fdd835!important;caret-color:#fdd835!important}.v-application .yellow.darken-2{background-color:#fbc02d!important;border-color:#fbc02d!important}.v-application .yellow--text.text--darken-2{color:#fbc02d!important;caret-color:#fbc02d!important}.v-application .yellow.darken-3{background-color:#f9a825!important;border-color:#f9a825!important}.v-application .yellow--text.text--darken-3{color:#f9a825!important;caret-color:#f9a825!important}.v-application .yellow.darken-4{background-color:#f57f17!important;border-color:#f57f17!important}.v-application .yellow--text.text--darken-4{color:#f57f17!important;caret-color:#f57f17!important}.v-application .yellow.accent-1{background-color:#ffff8d!important;border-color:#ffff8d!important}.v-application .yellow--text.text--accent-1{color:#ffff8d!important;caret-color:#ffff8d!important}.v-application .yellow.accent-2{background-color:#ff0!important;border-color:#ff0!important}.v-application .yellow--text.text--accent-2{color:#ff0!important;caret-color:#ff0!important}.v-application .yellow.accent-3{background-color:#ffea00!important;border-color:#ffea00!important}.v-application .yellow--text.text--accent-3{color:#ffea00!important;caret-color:#ffea00!important}.v-application .yellow.accent-4{background-color:#ffd600!important;border-color:#ffd600!important}.v-application .yellow--text.text--accent-4{color:#ffd600!important;caret-color:#ffd600!important}.v-application .amber{background-color:#ffc107!important;border-color:#ffc107!important}.v-application .amber--text{color:#ffc107!important;caret-color:#ffc107!important}.v-application .amber.lighten-5{background-color:#fff8e1!important;border-color:#fff8e1!important}.v-application .amber--text.text--lighten-5{color:#fff8e1!important;caret-color:#fff8e1!important}.v-application .amber.lighten-4{background-color:#ffecb3!important;border-color:#ffecb3!important}.v-application .amber--text.text--lighten-4{color:#ffecb3!important;caret-color:#ffecb3!important}.v-application .amber.lighten-3{background-color:#ffe082!important;border-color:#ffe082!important}.v-application .amber--text.text--lighten-3{color:#ffe082!important;caret-color:#ffe082!important}.v-application .amber.lighten-2{background-color:#ffd54f!important;border-color:#ffd54f!important}.v-application .amber--text.text--lighten-2{color:#ffd54f!important;caret-color:#ffd54f!important}.v-application .amber.lighten-1{background-color:#ffca28!important;border-color:#ffca28!important}.v-application .amber--text.text--lighten-1{color:#ffca28!important;caret-color:#ffca28!important}.v-application .amber.darken-1{background-color:#ffb300!important;border-color:#ffb300!important}.v-application .amber--text.text--darken-1{color:#ffb300!important;caret-color:#ffb300!important}.v-application .amber.darken-2{background-color:#ffa000!important;border-color:#ffa000!important}.v-application .amber--text.text--darken-2{color:#ffa000!important;caret-color:#ffa000!important}.v-application .amber.darken-3{background-color:#ff8f00!important;border-color:#ff8f00!important}.v-application .amber--text.text--darken-3{color:#ff8f00!important;caret-color:#ff8f00!important}.v-application .amber.darken-4{background-color:#ff6f00!important;border-color:#ff6f00!important}.v-application .amber--text.text--darken-4{color:#ff6f00!important;caret-color:#ff6f00!important}.v-application .amber.accent-1{background-color:#ffe57f!important;border-color:#ffe57f!important}.v-application .amber--text.text--accent-1{color:#ffe57f!important;caret-color:#ffe57f!important}.v-application .amber.accent-2{background-color:#ffd740!important;border-color:#ffd740!important}.v-application .amber--text.text--accent-2{color:#ffd740!important;caret-color:#ffd740!important}.v-application .amber.accent-3{background-color:#ffc400!important;border-color:#ffc400!important}.v-application .amber--text.text--accent-3{color:#ffc400!important;caret-color:#ffc400!important}.v-application .amber.accent-4{background-color:#ffab00!important;border-color:#ffab00!important}.v-application .amber--text.text--accent-4{color:#ffab00!important;caret-color:#ffab00!important}.v-application .orange{background-color:#ff9800!important;border-color:#ff9800!important}.v-application .orange--text{color:#ff9800!important;caret-color:#ff9800!important}.v-application .orange.lighten-5{background-color:#fff3e0!important;border-color:#fff3e0!important}.v-application .orange--text.text--lighten-5{color:#fff3e0!important;caret-color:#fff3e0!important}.v-application .orange.lighten-4{background-color:#ffe0b2!important;border-color:#ffe0b2!important}.v-application .orange--text.text--lighten-4{color:#ffe0b2!important;caret-color:#ffe0b2!important}.v-application .orange.lighten-3{background-color:#ffcc80!important;border-color:#ffcc80!important}.v-application .orange--text.text--lighten-3{color:#ffcc80!important;caret-color:#ffcc80!important}.v-application .orange.lighten-2{background-color:#ffb74d!important;border-color:#ffb74d!important}.v-application .orange--text.text--lighten-2{color:#ffb74d!important;caret-color:#ffb74d!important}.v-application .orange.lighten-1{background-color:#ffa726!important;border-color:#ffa726!important}.v-application .orange--text.text--lighten-1{color:#ffa726!important;caret-color:#ffa726!important}.v-application .orange.darken-1{background-color:#fb8c00!important;border-color:#fb8c00!important}.v-application .orange--text.text--darken-1{color:#fb8c00!important;caret-color:#fb8c00!important}.v-application .orange.darken-2{background-color:#f57c00!important;border-color:#f57c00!important}.v-application .orange--text.text--darken-2{color:#f57c00!important;caret-color:#f57c00!important}.v-application .orange.darken-3{background-color:#ef6c00!important;border-color:#ef6c00!important}.v-application .orange--text.text--darken-3{color:#ef6c00!important;caret-color:#ef6c00!important}.v-application .orange.darken-4{background-color:#e65100!important;border-color:#e65100!important}.v-application .orange--text.text--darken-4{color:#e65100!important;caret-color:#e65100!important}.v-application .orange.accent-1{background-color:#ffd180!important;border-color:#ffd180!important}.v-application .orange--text.text--accent-1{color:#ffd180!important;caret-color:#ffd180!important}.v-application .orange.accent-2{background-color:#ffab40!important;border-color:#ffab40!important}.v-application .orange--text.text--accent-2{color:#ffab40!important;caret-color:#ffab40!important}.v-application .orange.accent-3{background-color:#ff9100!important;border-color:#ff9100!important}.v-application .orange--text.text--accent-3{color:#ff9100!important;caret-color:#ff9100!important}.v-application .orange.accent-4{background-color:#ff6d00!important;border-color:#ff6d00!important}.v-application .orange--text.text--accent-4{color:#ff6d00!important;caret-color:#ff6d00!important}.v-application .deep-orange{background-color:#ff5722!important;border-color:#ff5722!important}.v-application .deep-orange--text{color:#ff5722!important;caret-color:#ff5722!important}.v-application .deep-orange.lighten-5{background-color:#fbe9e7!important;border-color:#fbe9e7!important}.v-application .deep-orange--text.text--lighten-5{color:#fbe9e7!important;caret-color:#fbe9e7!important}.v-application .deep-orange.lighten-4{background-color:#ffccbc!important;border-color:#ffccbc!important}.v-application .deep-orange--text.text--lighten-4{color:#ffccbc!important;caret-color:#ffccbc!important}.v-application .deep-orange.lighten-3{background-color:#ffab91!important;border-color:#ffab91!important}.v-application .deep-orange--text.text--lighten-3{color:#ffab91!important;caret-color:#ffab91!important}.v-application .deep-orange.lighten-2{background-color:#ff8a65!important;border-color:#ff8a65!important}.v-application .deep-orange--text.text--lighten-2{color:#ff8a65!important;caret-color:#ff8a65!important}.v-application .deep-orange.lighten-1{background-color:#ff7043!important;border-color:#ff7043!important}.v-application .deep-orange--text.text--lighten-1{color:#ff7043!important;caret-color:#ff7043!important}.v-application .deep-orange.darken-1{background-color:#f4511e!important;border-color:#f4511e!important}.v-application .deep-orange--text.text--darken-1{color:#f4511e!important;caret-color:#f4511e!important}.v-application .deep-orange.darken-2{background-color:#e64a19!important;border-color:#e64a19!important}.v-application .deep-orange--text.text--darken-2{color:#e64a19!important;caret-color:#e64a19!important}.v-application .deep-orange.darken-3{background-color:#d84315!important;border-color:#d84315!important}.v-application .deep-orange--text.text--darken-3{color:#d84315!important;caret-color:#d84315!important}.v-application .deep-orange.darken-4{background-color:#bf360c!important;border-color:#bf360c!important}.v-application .deep-orange--text.text--darken-4{color:#bf360c!important;caret-color:#bf360c!important}.v-application .deep-orange.accent-1{background-color:#ff9e80!important;border-color:#ff9e80!important}.v-application .deep-orange--text.text--accent-1{color:#ff9e80!important;caret-color:#ff9e80!important}.v-application .deep-orange.accent-2{background-color:#ff6e40!important;border-color:#ff6e40!important}.v-application .deep-orange--text.text--accent-2{color:#ff6e40!important;caret-color:#ff6e40!important}.v-application .deep-orange.accent-3{background-color:#ff3d00!important;border-color:#ff3d00!important}.v-application .deep-orange--text.text--accent-3{color:#ff3d00!important;caret-color:#ff3d00!important}.v-application .deep-orange.accent-4{background-color:#dd2c00!important;border-color:#dd2c00!important}.v-application .deep-orange--text.text--accent-4{color:#dd2c00!important;caret-color:#dd2c00!important}.v-application .brown{background-color:#795548!important;border-color:#795548!important}.v-application .brown--text{color:#795548!important;caret-color:#795548!important}.v-application .brown.lighten-5{background-color:#efebe9!important;border-color:#efebe9!important}.v-application .brown--text.text--lighten-5{color:#efebe9!important;caret-color:#efebe9!important}.v-application .brown.lighten-4{background-color:#d7ccc8!important;border-color:#d7ccc8!important}.v-application .brown--text.text--lighten-4{color:#d7ccc8!important;caret-color:#d7ccc8!important}.v-application .brown.lighten-3{background-color:#bcaaa4!important;border-color:#bcaaa4!important}.v-application .brown--text.text--lighten-3{color:#bcaaa4!important;caret-color:#bcaaa4!important}.v-application .brown.lighten-2{background-color:#a1887f!important;border-color:#a1887f!important}.v-application .brown--text.text--lighten-2{color:#a1887f!important;caret-color:#a1887f!important}.v-application .brown.lighten-1{background-color:#8d6e63!important;border-color:#8d6e63!important}.v-application .brown--text.text--lighten-1{color:#8d6e63!important;caret-color:#8d6e63!important}.v-application .brown.darken-1{background-color:#6d4c41!important;border-color:#6d4c41!important}.v-application .brown--text.text--darken-1{color:#6d4c41!important;caret-color:#6d4c41!important}.v-application .brown.darken-2{background-color:#5d4037!important;border-color:#5d4037!important}.v-application .brown--text.text--darken-2{color:#5d4037!important;caret-color:#5d4037!important}.v-application .brown.darken-3{background-color:#4e342e!important;border-color:#4e342e!important}.v-application .brown--text.text--darken-3{color:#4e342e!important;caret-color:#4e342e!important}.v-application .brown.darken-4{background-color:#3e2723!important;border-color:#3e2723!important}.v-application .brown--text.text--darken-4{color:#3e2723!important;caret-color:#3e2723!important}.v-application .blue-grey{background-color:#607d8b!important;border-color:#607d8b!important}.v-application .blue-grey--text{color:#607d8b!important;caret-color:#607d8b!important}.v-application .blue-grey.lighten-5{background-color:#eceff1!important;border-color:#eceff1!important}.v-application .blue-grey--text.text--lighten-5{color:#eceff1!important;caret-color:#eceff1!important}.v-application .blue-grey.lighten-4{background-color:#cfd8dc!important;border-color:#cfd8dc!important}.v-application .blue-grey--text.text--lighten-4{color:#cfd8dc!important;caret-color:#cfd8dc!important}.v-application .blue-grey.lighten-3{background-color:#b0bec5!important;border-color:#b0bec5!important}.v-application .blue-grey--text.text--lighten-3{color:#b0bec5!important;caret-color:#b0bec5!important}.v-application .blue-grey.lighten-2{background-color:#90a4ae!important;border-color:#90a4ae!important}.v-application .blue-grey--text.text--lighten-2{color:#90a4ae!important;caret-color:#90a4ae!important}.v-application .blue-grey.lighten-1{background-color:#78909c!important;border-color:#78909c!important}.v-application .blue-grey--text.text--lighten-1{color:#78909c!important;caret-color:#78909c!important}.v-application .blue-grey.darken-1{background-color:#546e7a!important;border-color:#546e7a!important}.v-application .blue-grey--text.text--darken-1{color:#546e7a!important;caret-color:#546e7a!important}.v-application .blue-grey.darken-2{background-color:#455a64!important;border-color:#455a64!important}.v-application .blue-grey--text.text--darken-2{color:#455a64!important;caret-color:#455a64!important}.v-application .blue-grey.darken-3{background-color:#37474f!important;border-color:#37474f!important}.v-application .blue-grey--text.text--darken-3{color:#37474f!important;caret-color:#37474f!important}.v-application .blue-grey.darken-4{background-color:#263238!important;border-color:#263238!important}.v-application .blue-grey--text.text--darken-4{color:#263238!important;caret-color:#263238!important}.v-application .grey{background-color:#9e9e9e!important;border-color:#9e9e9e!important}.v-application .grey--text{color:#9e9e9e!important;caret-color:#9e9e9e!important}.v-application .grey.lighten-5{background-color:#fafafa!important;border-color:#fafafa!important}.v-application .grey--text.text--lighten-5{color:#fafafa!important;caret-color:#fafafa!important}.v-application .grey.lighten-4{background-color:#f5f5f5!important;border-color:#f5f5f5!important}.v-application .grey--text.text--lighten-4{color:#f5f5f5!important;caret-color:#f5f5f5!important}.v-application .grey.lighten-3{background-color:#eee!important;border-color:#eee!important}.v-application .grey--text.text--lighten-3{color:#eee!important;caret-color:#eee!important}.v-application .grey.lighten-2{background-color:#e0e0e0!important;border-color:#e0e0e0!important}.v-application .grey--text.text--lighten-2{color:#e0e0e0!important;caret-color:#e0e0e0!important}.v-application .grey.lighten-1{background-color:#bdbdbd!important;border-color:#bdbdbd!important}.v-application .grey--text.text--lighten-1{color:#bdbdbd!important;caret-color:#bdbdbd!important}.v-application .grey.darken-1{background-color:#757575!important;border-color:#757575!important}.v-application .grey--text.text--darken-1{color:#757575!important;caret-color:#757575!important}.v-application .grey.darken-2{background-color:#616161!important;border-color:#616161!important}.v-application .grey--text.text--darken-2{color:#616161!important;caret-color:#616161!important}.v-application .grey.darken-3{background-color:#424242!important;border-color:#424242!important}.v-application .grey--text.text--darken-3{color:#424242!important;caret-color:#424242!important}.v-application .grey.darken-4{background-color:#212121!important;border-color:#212121!important}.v-application .grey--text.text--darken-4{color:#212121!important;caret-color:#212121!important}.v-application .shades.black{background-color:#000!important;border-color:#000!important}.v-application .shades--text.text--black{color:#000!important;caret-color:#000!important}.v-application .shades.white{background-color:#fff!important;border-color:#fff!important}.v-application .shades--text.text--white{color:#fff!important;caret-color:#fff!important}.v-application .shades.transparent{background-color:transparent!important;border-color:transparent!important}.v-application .shades--text.text--transparent{color:transparent!important;caret-color:transparent!important}/*! + * ress.css • v2.0.4 + * MIT License + * github.com/filipelinhares/ress + */html{box-sizing:border-box;overflow-y:scroll;-webkit-text-size-adjust:100%;word-break:normal;-moz-tab-size:4;-o-tab-size:4;tab-size:4}*,:after,:before{background-repeat:no-repeat;box-sizing:inherit}:after,:before{text-decoration:inherit;vertical-align:inherit}*{padding:0;margin:0}hr{overflow:visible;height:0}details,main{display:block}summary{display:list-item}small{font-size:80%}[hidden]{display:none}abbr[title]{border-bottom:none;text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}a{background-color:transparent}a:active,a:hover{outline-width:0}code,kbd,pre,samp{font-family:monospace,monospace}pre{font-size:1em}b,strong{font-weight:bolder}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}input{border-radius:0}[disabled]{cursor:default}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-cancel-button,[type=search]::-webkit-search-decoration{-webkit-appearance:none}textarea{overflow:auto;resize:vertical}button,input,optgroup,select,textarea{font:inherit}optgroup{font-weight:700}button{overflow:visible}button,select{text-transform:none}[role=button],[type=button],[type=reset],[type=submit],button{cursor:pointer;color:inherit}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{border-style:none;padding:0}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button:-moz-focusring{outline:1px dotted ButtonText}[type=reset],[type=submit],button,html [type=button]{-webkit-appearance:button}button,input,select,textarea{background-color:transparent;border-style:none}select{-moz-appearance:none;-webkit-appearance:none}select::-ms-expand{display:none}select::-ms-value{color:currentColor}legend{border:0;color:inherit;display:table;white-space:normal;max-width:100%}::-webkit-file-upload-button{-webkit-appearance:button;color:inherit;font:inherit}img{border-style:none}progress{vertical-align:baseline}@media screen{[hidden~=screen]{display:inherit}[hidden~=screen]:not(:active):not(:focus):not(:target){position:absolute!important;clip:rect(0 0 0 0)!important}}[aria-busy=true]{cursor:progress}[aria-controls]{cursor:pointer}[aria-disabled=true]{cursor:default}.v-application .elevation-24{box-shadow:0 11px 15px -7px rgba(0,0,0,.2),0 24px 38px 3px rgba(0,0,0,.14),0 9px 46px 8px rgba(0,0,0,.12)!important}.v-application .elevation-23{box-shadow:0 11px 14px -7px rgba(0,0,0,.2),0 23px 36px 3px rgba(0,0,0,.14),0 9px 44px 8px rgba(0,0,0,.12)!important}.v-application .elevation-22{box-shadow:0 10px 14px -6px rgba(0,0,0,.2),0 22px 35px 3px rgba(0,0,0,.14),0 8px 42px 7px rgba(0,0,0,.12)!important}.v-application .elevation-21{box-shadow:0 10px 13px -6px rgba(0,0,0,.2),0 21px 33px 3px rgba(0,0,0,.14),0 8px 40px 7px rgba(0,0,0,.12)!important}.v-application .elevation-20{box-shadow:0 10px 13px -6px rgba(0,0,0,.2),0 20px 31px 3px rgba(0,0,0,.14),0 8px 38px 7px rgba(0,0,0,.12)!important}.v-application .elevation-19{box-shadow:0 9px 12px -6px rgba(0,0,0,.2),0 19px 29px 2px rgba(0,0,0,.14),0 7px 36px 6px rgba(0,0,0,.12)!important}.v-application .elevation-18{box-shadow:0 9px 11px -5px rgba(0,0,0,.2),0 18px 28px 2px rgba(0,0,0,.14),0 7px 34px 6px rgba(0,0,0,.12)!important}.v-application .elevation-17{box-shadow:0 8px 11px -5px rgba(0,0,0,.2),0 17px 26px 2px rgba(0,0,0,.14),0 6px 32px 5px rgba(0,0,0,.12)!important}.v-application .elevation-16{box-shadow:0 8px 10px -5px rgba(0,0,0,.2),0 16px 24px 2px rgba(0,0,0,.14),0 6px 30px 5px rgba(0,0,0,.12)!important}.v-application .elevation-15{box-shadow:0 8px 9px -5px rgba(0,0,0,.2),0 15px 22px 2px rgba(0,0,0,.14),0 6px 28px 5px rgba(0,0,0,.12)!important}.v-application .elevation-14{box-shadow:0 7px 9px -4px rgba(0,0,0,.2),0 14px 21px 2px rgba(0,0,0,.14),0 5px 26px 4px rgba(0,0,0,.12)!important}.v-application .elevation-13{box-shadow:0 7px 8px -4px rgba(0,0,0,.2),0 13px 19px 2px rgba(0,0,0,.14),0 5px 24px 4px rgba(0,0,0,.12)!important}.v-application .elevation-12{box-shadow:0 7px 8px -4px rgba(0,0,0,.2),0 12px 17px 2px rgba(0,0,0,.14),0 5px 22px 4px rgba(0,0,0,.12)!important}.v-application .elevation-11{box-shadow:0 6px 7px -4px rgba(0,0,0,.2),0 11px 15px 1px rgba(0,0,0,.14),0 4px 20px 3px rgba(0,0,0,.12)!important}.v-application .elevation-10{box-shadow:0 6px 6px -3px rgba(0,0,0,.2),0 10px 14px 1px rgba(0,0,0,.14),0 4px 18px 3px rgba(0,0,0,.12)!important}.v-application .elevation-9{box-shadow:0 5px 6px -3px rgba(0,0,0,.2),0 9px 12px 1px rgba(0,0,0,.14),0 3px 16px 2px rgba(0,0,0,.12)!important}.v-application .elevation-8{box-shadow:0 5px 5px -3px rgba(0,0,0,.2),0 8px 10px 1px rgba(0,0,0,.14),0 3px 14px 2px rgba(0,0,0,.12)!important}.v-application .elevation-7{box-shadow:0 4px 5px -2px rgba(0,0,0,.2),0 7px 10px 1px rgba(0,0,0,.14),0 2px 16px 1px rgba(0,0,0,.12)!important}.v-application .elevation-6{box-shadow:0 3px 5px -1px rgba(0,0,0,.2),0 6px 10px 0 rgba(0,0,0,.14),0 1px 18px 0 rgba(0,0,0,.12)!important}.v-application .elevation-5{box-shadow:0 3px 5px -1px rgba(0,0,0,.2),0 5px 8px 0 rgba(0,0,0,.14),0 1px 14px 0 rgba(0,0,0,.12)!important}.v-application .elevation-4{box-shadow:0 2px 4px -1px rgba(0,0,0,.2),0 4px 5px 0 rgba(0,0,0,.14),0 1px 10px 0 rgba(0,0,0,.12)!important}.v-application .elevation-3{box-shadow:0 3px 3px -2px rgba(0,0,0,.2),0 3px 4px 0 rgba(0,0,0,.14),0 1px 8px 0 rgba(0,0,0,.12)!important}.v-application .elevation-2{box-shadow:0 3px 1px -2px rgba(0,0,0,.2),0 2px 2px 0 rgba(0,0,0,.14),0 1px 5px 0 rgba(0,0,0,.12)!important}.v-application .elevation-1{box-shadow:0 2px 1px -1px rgba(0,0,0,.2),0 1px 1px 0 rgba(0,0,0,.14),0 1px 3px 0 rgba(0,0,0,.12)!important}.v-application .elevation-0{box-shadow:0 0 0 0 rgba(0,0,0,.2),0 0 0 0 rgba(0,0,0,.14),0 0 0 0 rgba(0,0,0,.12)!important}.v-application .carousel-transition-enter{transform:translate(100%)}.v-application .carousel-transition-leave,.v-application .carousel-transition-leave-to{position:absolute;top:0;transform:translate(-100%)}.carousel-reverse-transition-enter{transform:translate(-100%)}.carousel-reverse-transition-leave,.carousel-reverse-transition-leave-to{position:absolute;top:0;transform:translate(100%)}.dialog-transition-enter,.dialog-transition-leave-to{transform:scale(.5);opacity:0}.dialog-transition-enter-to,.dialog-transition-leave{opacity:1}.dialog-bottom-transition-enter,.dialog-bottom-transition-leave-to{transform:translateY(100%)}.dialog-top-transition-enter,.dialog-top-transition-leave-to{transform:translateY(-100%)}.picker-reverse-transition-enter-active,.picker-reverse-transition-leave-active,.picker-transition-enter-active,.picker-transition-leave-active{transition:.3s cubic-bezier(0,0,.2,1)}.picker-reverse-transition-enter,.picker-reverse-transition-leave-to,.picker-transition-enter,.picker-transition-leave-to{opacity:0}.picker-reverse-transition-leave,.picker-reverse-transition-leave-active,.picker-reverse-transition-leave-to,.picker-transition-leave,.picker-transition-leave-active,.picker-transition-leave-to{position:absolute!important}.picker-transition-enter{transform:translateY(100%)}.picker-reverse-transition-enter,.picker-transition-leave-to{transform:translateY(-100%)}.picker-reverse-transition-leave-to{transform:translateY(100%)}.picker-title-transition-enter-to,.picker-title-transition-leave{transform:translate(0)}.picker-title-transition-enter{transform:translate(-100%)}.picker-title-transition-leave-to{opacity:0;transform:translate(100%)}.picker-title-transition-leave,.picker-title-transition-leave-active,.picker-title-transition-leave-to{position:absolute!important}.tab-transition-enter{transform:translate(100%)}.tab-transition-leave,.tab-transition-leave-active{position:absolute;top:0}.tab-transition-leave-to{position:absolute}.tab-reverse-transition-enter,.tab-transition-leave-to{transform:translate(-100%)}.tab-reverse-transition-leave,.tab-reverse-transition-leave-to{top:0;position:absolute;transform:translate(100%)}.expand-transition-enter-active,.expand-transition-leave-active{transition:.3s cubic-bezier(.25,.8,.5,1)!important}.expand-transition-move{transition:transform .6s}.expand-x-transition-enter-active,.expand-x-transition-leave-active{transition:.3s cubic-bezier(.25,.8,.5,1)!important}.expand-x-transition-move{transition:transform .6s}.scale-transition-enter-active,.scale-transition-leave-active{transition:.3s cubic-bezier(.25,.8,.5,1)!important}.scale-transition-move{transition:transform .6s}.scale-transition-enter,.scale-transition-leave,.scale-transition-leave-to{opacity:0;transform:scale(0)}.scale-rotate-transition-enter-active,.scale-rotate-transition-leave-active{transition:.3s cubic-bezier(.25,.8,.5,1)!important}.scale-rotate-transition-move{transition:transform .6s}.scale-rotate-transition-enter,.scale-rotate-transition-leave,.scale-rotate-transition-leave-to{opacity:0;transform:scale(0) rotate(-45deg)}.scale-rotate-reverse-transition-enter-active,.scale-rotate-reverse-transition-leave-active{transition:.3s cubic-bezier(.25,.8,.5,1)!important}.scale-rotate-reverse-transition-move{transition:transform .6s}.scale-rotate-reverse-transition-enter,.scale-rotate-reverse-transition-leave,.scale-rotate-reverse-transition-leave-to{opacity:0;transform:scale(0) rotate(45deg)}.message-transition-enter-active,.message-transition-leave-active{transition:.3s cubic-bezier(.25,.8,.5,1)!important}.message-transition-move{transition:transform .6s}.message-transition-enter,.message-transition-leave-to{opacity:0;transform:translateY(-15px)}.message-transition-leave,.message-transition-leave-active{position:absolute}.slide-y-transition-enter-active,.slide-y-transition-leave-active{transition:.3s cubic-bezier(.25,.8,.5,1)!important}.slide-y-transition-move{transition:transform .6s}.slide-y-transition-enter,.slide-y-transition-leave-to{opacity:0;transform:translateY(-15px)}.slide-y-reverse-transition-enter-active,.slide-y-reverse-transition-leave-active{transition:.3s cubic-bezier(.25,.8,.5,1)!important}.slide-y-reverse-transition-move{transition:transform .6s}.slide-y-reverse-transition-enter,.slide-y-reverse-transition-leave-to{opacity:0;transform:translateY(15px)}.scroll-y-transition-enter-active,.scroll-y-transition-leave-active{transition:.3s cubic-bezier(.25,.8,.5,1)!important}.scroll-y-transition-move{transition:transform .6s}.scroll-y-transition-enter,.scroll-y-transition-leave-to{opacity:0}.scroll-y-transition-enter{transform:translateY(-15px)}.scroll-y-transition-leave-to{transform:translateY(15px)}.scroll-y-reverse-transition-enter-active,.scroll-y-reverse-transition-leave-active{transition:.3s cubic-bezier(.25,.8,.5,1)!important}.scroll-y-reverse-transition-move{transition:transform .6s}.scroll-y-reverse-transition-enter,.scroll-y-reverse-transition-leave-to{opacity:0}.scroll-y-reverse-transition-enter{transform:translateY(15px)}.scroll-y-reverse-transition-leave-to{transform:translateY(-15px)}.scroll-x-transition-enter-active,.scroll-x-transition-leave-active{transition:.3s cubic-bezier(.25,.8,.5,1)!important}.scroll-x-transition-move{transition:transform .6s}.scroll-x-transition-enter,.scroll-x-transition-leave-to{opacity:0}.scroll-x-transition-enter{transform:translateX(-15px)}.scroll-x-transition-leave-to{transform:translateX(15px)}.scroll-x-reverse-transition-enter-active,.scroll-x-reverse-transition-leave-active{transition:.3s cubic-bezier(.25,.8,.5,1)!important}.scroll-x-reverse-transition-move{transition:transform .6s}.scroll-x-reverse-transition-enter,.scroll-x-reverse-transition-leave-to{opacity:0}.scroll-x-reverse-transition-enter{transform:translateX(15px)}.scroll-x-reverse-transition-leave-to{transform:translateX(-15px)}.slide-x-transition-enter-active,.slide-x-transition-leave-active{transition:.3s cubic-bezier(.25,.8,.5,1)!important}.slide-x-transition-move{transition:transform .6s}.slide-x-transition-enter,.slide-x-transition-leave-to{opacity:0;transform:translateX(-15px)}.slide-x-reverse-transition-enter-active,.slide-x-reverse-transition-leave-active{transition:.3s cubic-bezier(.25,.8,.5,1)!important}.slide-x-reverse-transition-move{transition:transform .6s}.slide-x-reverse-transition-enter,.slide-x-reverse-transition-leave-to{opacity:0;transform:translateX(15px)}.fade-transition-enter-active,.fade-transition-leave-active{transition:.3s cubic-bezier(.25,.8,.5,1)!important}.fade-transition-move{transition:transform .6s}.fade-transition-enter,.fade-transition-leave-to{opacity:0!important}.fab-transition-enter-active,.fab-transition-leave-active{transition:.3s cubic-bezier(.25,.8,.5,1)!important}.fab-transition-move{transition:transform .6s}.fab-transition-enter,.fab-transition-leave-to{transform:scale(0) rotate(-45deg)}.v-application .blockquote{padding:16px 0 16px 24px;font-size:18px;font-weight:300}.v-application code,.v-application kbd{border-radius:3px;font-size:85%;font-weight:400}.v-application code{padding:.2em .4em}.v-application kbd{padding:.2em .4rem;box-shadow:0 3px 1px -2px rgba(0,0,0,.2),0 2px 2px 0 rgba(0,0,0,.14),0 1px 5px 0 rgba(0,0,0,.12)}.theme--light.v-application code{background-color:rgba(0,0,0,.05);color:currentColor}.theme--light.v-application kbd{background:#212529;color:#fff}.theme--dark.v-application code{background-color:hsla(0,0%,100%,.1);color:currentColor}.theme--dark.v-application kbd{background:#212529;color:#fff}html{font-size:16px;overflow-x:hidden;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;-webkit-tap-highlight-color:rgba(0,0,0,0)}html.overflow-y-hidden{overflow-y:hidden!important}.v-application{font-family:Roboto,sans-serif;line-height:1.5}.v-application ::-ms-clear,.v-application ::-ms-reveal{display:none}@supports(-webkit-touch-callout:none){body{cursor:pointer}}.v-application .theme--light.heading{color:rgba(0,0,0,.87)}.v-application .theme--dark.heading{color:#fff}.v-application ol,.v-application ul{padding-left:24px}.v-application .display-4{font-size:6rem!important;line-height:6rem;letter-spacing:-.015625em!important}.v-application .display-3,.v-application .display-4{font-weight:300;font-family:Roboto,sans-serif!important}.v-application .display-3{font-size:3.75rem!important;line-height:3.75rem;letter-spacing:-.0083333333em!important}.v-application .display-2{font-size:3rem!important;line-height:3.125rem;letter-spacing:normal!important}.v-application .display-1,.v-application .display-2{font-weight:400;font-family:Roboto,sans-serif!important}.v-application .display-1{font-size:2.125rem!important;line-height:2.5rem;letter-spacing:.0073529412em!important}.v-application .headline{font-size:1.5rem!important;font-weight:400;letter-spacing:normal!important}.v-application .headline,.v-application .title{line-height:2rem;font-family:Roboto,sans-serif!important}.v-application .title{font-size:1.25rem!important;font-weight:500;letter-spacing:.0125em!important}.v-application .subtitle-2{font-size:.875rem!important;font-weight:500;letter-spacing:.0071428571em!important;line-height:1.375rem;font-family:Roboto,sans-serif!important}.v-application .subtitle-1{font-size:1rem!important;letter-spacing:.009375em!important;line-height:1.75rem}.v-application .body-2,.v-application .subtitle-1{font-weight:400;font-family:Roboto,sans-serif!important}.v-application .body-2{font-size:.875rem!important;letter-spacing:.0178571429em!important;line-height:1.25rem}.v-application .body-1{font-size:1rem!important;letter-spacing:.03125em!important;line-height:1.5rem}.v-application .body-1,.v-application .caption{font-weight:400;font-family:Roboto,sans-serif!important}.v-application .caption{font-size:.75rem!important;letter-spacing:.0333333333em!important;line-height:1.25rem}.v-application .overline{font-size:.75rem!important;font-weight:500;letter-spacing:.1666666667em!important;line-height:2rem;text-transform:uppercase;font-family:Roboto,sans-serif!important}.v-application p{margin-bottom:16px}@media only print{.v-application .hidden-print-only{display:none!important}}@media only screen{.v-application .hidden-screen-only{display:none!important}}@media only screen and (max-width:599px){.v-application .hidden-xs-only{display:none!important}}@media only screen and (min-width:600px)and (max-width:959px){.v-application .hidden-sm-only{display:none!important}}@media only screen and (max-width:959px){.v-application .hidden-sm-and-down{display:none!important}}@media only screen and (min-width:600px){.v-application .hidden-sm-and-up{display:none!important}}@media only screen and (min-width:960px)and (max-width:1263px){.v-application .hidden-md-only{display:none!important}}@media only screen and (max-width:1263px){.v-application .hidden-md-and-down{display:none!important}}@media only screen and (min-width:960px){.v-application .hidden-md-and-up{display:none!important}}@media only screen and (min-width:1264px)and (max-width:1903px){.v-application .hidden-lg-only{display:none!important}}@media only screen and (max-width:1903px){.v-application .hidden-lg-and-down{display:none!important}}@media only screen and (min-width:1264px){.v-application .hidden-lg-and-up{display:none!important}}@media only screen and (min-width:1904px){.v-application .hidden-xl-only{display:none!important}}.d-sr-only,.d-sr-only-focusable:not(:focus){border:0!important;clip:rect(0,0,0,0)!important;height:1px!important;margin:-1px!important;overflow:hidden!important;padding:0!important;position:absolute!important;white-space:nowrap!important;width:1px!important}.v-application .font-weight-thin{font-weight:100!important}.v-application .font-weight-light{font-weight:300!important}.v-application .font-weight-regular{font-weight:400!important}.v-application .font-weight-medium{font-weight:500!important}.v-application .font-weight-bold{font-weight:700!important}.v-application .font-weight-black{font-weight:900!important}.v-application .font-italic{font-style:italic!important}.v-application .transition-fast-out-slow-in{transition:.3s cubic-bezier(.4,0,.2,1)!important}.v-application .transition-linear-out-slow-in{transition:.3s cubic-bezier(0,0,.2,1)!important}.v-application .transition-fast-out-linear-in{transition:.3s cubic-bezier(.4,0,1,1)!important}.v-application .transition-ease-in-out{transition:.3s cubic-bezier(.4,0,.6,1)!important}.v-application .transition-fast-in-fast-out{transition:.3s cubic-bezier(.25,.8,.25,1)!important}.v-application .transition-swing{transition:.3s cubic-bezier(.25,.8,.5,1)!important}.v-application .overflow-auto{overflow:auto!important}.v-application .overflow-hidden{overflow:hidden!important}.v-application .overflow-visible{overflow:visible!important}.v-application .overflow-x-auto{overflow-x:auto!important}.v-application .overflow-x-hidden{overflow-x:hidden!important}.v-application .overflow-y-auto{overflow-y:auto!important}.v-application .overflow-y-hidden{overflow-y:hidden!important}.v-application .d-none{display:none!important}.v-application .d-inline{display:inline!important}.v-application .d-inline-block{display:inline-block!important}.v-application .d-block{display:block!important}.v-application .d-table{display:table!important}.v-application .d-table-row{display:table-row!important}.v-application .d-table-cell{display:table-cell!important}.v-application .d-flex{display:flex!important}.v-application .d-inline-flex{display:inline-flex!important}.v-application .float-none{float:none!important}.v-application .float-left{float:left!important}.v-application .float-right{float:right!important}.v-application--is-rtl .float-end{float:left!important}.v-application--is-ltr .float-end,.v-application--is-rtl .float-start{float:right!important}.v-application--is-ltr .float-start{float:left!important}.v-application .flex-fill{flex:1 1 auto!important}.v-application .flex-row{flex-direction:row!important}.v-application .flex-column{flex-direction:column!important}.v-application .flex-row-reverse{flex-direction:row-reverse!important}.v-application .flex-column-reverse{flex-direction:column-reverse!important}.v-application .flex-grow-0{flex-grow:0!important}.v-application .flex-grow-1{flex-grow:1!important}.v-application .flex-shrink-0{flex-shrink:0!important}.v-application .flex-shrink-1{flex-shrink:1!important}.v-application .flex-wrap{flex-wrap:wrap!important}.v-application .flex-nowrap{flex-wrap:nowrap!important}.v-application .flex-wrap-reverse{flex-wrap:wrap-reverse!important}.v-application .justify-start{justify-content:flex-start!important}.v-application .justify-end{justify-content:flex-end!important}.v-application .justify-center{justify-content:center!important}.v-application .justify-space-between{justify-content:space-between!important}.v-application .justify-space-around{justify-content:space-around!important}.v-application .align-start{align-items:flex-start!important}.v-application .align-end{align-items:flex-end!important}.v-application .align-center{align-items:center!important}.v-application .align-baseline{align-items:baseline!important}.v-application .align-stretch{align-items:stretch!important}.v-application .align-content-start{align-content:flex-start!important}.v-application .align-content-end{align-content:flex-end!important}.v-application .align-content-center{align-content:center!important}.v-application .align-content-space-between{align-content:space-between!important}.v-application .align-content-space-around{align-content:space-around!important}.v-application .align-content-stretch{align-content:stretch!important}.v-application .align-self-auto{align-self:auto!important}.v-application .align-self-start{align-self:flex-start!important}.v-application .align-self-end{align-self:flex-end!important}.v-application .align-self-center{align-self:center!important}.v-application .align-self-baseline{align-self:baseline!important}.v-application .align-self-stretch{align-self:stretch!important}.v-application .order-first{order:-1!important}.v-application .order-0{order:0!important}.v-application .order-1{order:1!important}.v-application .order-2{order:2!important}.v-application .order-3{order:3!important}.v-application .order-4{order:4!important}.v-application .order-5{order:5!important}.v-application .order-6{order:6!important}.v-application .order-7{order:7!important}.v-application .order-8{order:8!important}.v-application .order-9{order:9!important}.v-application .order-10{order:10!important}.v-application .order-11{order:11!important}.v-application .order-12{order:12!important}.v-application .order-last{order:13!important}.v-application .ma-0{margin:0!important}.v-application .ma-1{margin:4px!important}.v-application .ma-2{margin:8px!important}.v-application .ma-3{margin:12px!important}.v-application .ma-4{margin:16px!important}.v-application .ma-5{margin:20px!important}.v-application .ma-6{margin:24px!important}.v-application .ma-7{margin:28px!important}.v-application .ma-8{margin:32px!important}.v-application .ma-9{margin:36px!important}.v-application .ma-10{margin:40px!important}.v-application .ma-11{margin:44px!important}.v-application .ma-12{margin:48px!important}.v-application .ma-13{margin:52px!important}.v-application .ma-14{margin:56px!important}.v-application .ma-15{margin:60px!important}.v-application .ma-16{margin:64px!important}.v-application .ma-auto{margin:auto!important}.v-application .mx-0{margin-right:0!important;margin-left:0!important}.v-application .mx-1{margin-right:4px!important;margin-left:4px!important}.v-application .mx-2{margin-right:8px!important;margin-left:8px!important}.v-application .mx-3{margin-right:12px!important;margin-left:12px!important}.v-application .mx-4{margin-right:16px!important;margin-left:16px!important}.v-application .mx-5{margin-right:20px!important;margin-left:20px!important}.v-application .mx-6{margin-right:24px!important;margin-left:24px!important}.v-application .mx-7{margin-right:28px!important;margin-left:28px!important}.v-application .mx-8{margin-right:32px!important;margin-left:32px!important}.v-application .mx-9{margin-right:36px!important;margin-left:36px!important}.v-application .mx-10{margin-right:40px!important;margin-left:40px!important}.v-application .mx-11{margin-right:44px!important;margin-left:44px!important}.v-application .mx-12{margin-right:48px!important;margin-left:48px!important}.v-application .mx-13{margin-right:52px!important;margin-left:52px!important}.v-application .mx-14{margin-right:56px!important;margin-left:56px!important}.v-application .mx-15{margin-right:60px!important;margin-left:60px!important}.v-application .mx-16{margin-right:64px!important;margin-left:64px!important}.v-application .mx-auto{margin-right:auto!important;margin-left:auto!important}.v-application .my-0{margin-top:0!important;margin-bottom:0!important}.v-application .my-1{margin-top:4px!important;margin-bottom:4px!important}.v-application .my-2{margin-top:8px!important;margin-bottom:8px!important}.v-application .my-3{margin-top:12px!important;margin-bottom:12px!important}.v-application .my-4{margin-top:16px!important;margin-bottom:16px!important}.v-application .my-5{margin-top:20px!important;margin-bottom:20px!important}.v-application .my-6{margin-top:24px!important;margin-bottom:24px!important}.v-application .my-7{margin-top:28px!important;margin-bottom:28px!important}.v-application .my-8{margin-top:32px!important;margin-bottom:32px!important}.v-application .my-9{margin-top:36px!important;margin-bottom:36px!important}.v-application .my-10{margin-top:40px!important;margin-bottom:40px!important}.v-application .my-11{margin-top:44px!important;margin-bottom:44px!important}.v-application .my-12{margin-top:48px!important;margin-bottom:48px!important}.v-application .my-13{margin-top:52px!important;margin-bottom:52px!important}.v-application .my-14{margin-top:56px!important;margin-bottom:56px!important}.v-application .my-15{margin-top:60px!important;margin-bottom:60px!important}.v-application .my-16{margin-top:64px!important;margin-bottom:64px!important}.v-application .my-auto{margin-top:auto!important;margin-bottom:auto!important}.v-application .mt-0{margin-top:0!important}.v-application .mt-1{margin-top:4px!important}.v-application .mt-2{margin-top:8px!important}.v-application .mt-3{margin-top:12px!important}.v-application .mt-4{margin-top:16px!important}.v-application .mt-5{margin-top:20px!important}.v-application .mt-6{margin-top:24px!important}.v-application .mt-7{margin-top:28px!important}.v-application .mt-8{margin-top:32px!important}.v-application .mt-9{margin-top:36px!important}.v-application .mt-10{margin-top:40px!important}.v-application .mt-11{margin-top:44px!important}.v-application .mt-12{margin-top:48px!important}.v-application .mt-13{margin-top:52px!important}.v-application .mt-14{margin-top:56px!important}.v-application .mt-15{margin-top:60px!important}.v-application .mt-16{margin-top:64px!important}.v-application .mt-auto{margin-top:auto!important}.v-application .mr-0{margin-right:0!important}.v-application .mr-1{margin-right:4px!important}.v-application .mr-2{margin-right:8px!important}.v-application .mr-3{margin-right:12px!important}.v-application .mr-4{margin-right:16px!important}.v-application .mr-5{margin-right:20px!important}.v-application .mr-6{margin-right:24px!important}.v-application .mr-7{margin-right:28px!important}.v-application .mr-8{margin-right:32px!important}.v-application .mr-9{margin-right:36px!important}.v-application .mr-10{margin-right:40px!important}.v-application .mr-11{margin-right:44px!important}.v-application .mr-12{margin-right:48px!important}.v-application .mr-13{margin-right:52px!important}.v-application .mr-14{margin-right:56px!important}.v-application .mr-15{margin-right:60px!important}.v-application .mr-16{margin-right:64px!important}.v-application .mr-auto{margin-right:auto!important}.v-application .mb-0{margin-bottom:0!important}.v-application .mb-1{margin-bottom:4px!important}.v-application .mb-2{margin-bottom:8px!important}.v-application .mb-3{margin-bottom:12px!important}.v-application .mb-4{margin-bottom:16px!important}.v-application .mb-5{margin-bottom:20px!important}.v-application .mb-6{margin-bottom:24px!important}.v-application .mb-7{margin-bottom:28px!important}.v-application .mb-8{margin-bottom:32px!important}.v-application .mb-9{margin-bottom:36px!important}.v-application .mb-10{margin-bottom:40px!important}.v-application .mb-11{margin-bottom:44px!important}.v-application .mb-12{margin-bottom:48px!important}.v-application .mb-13{margin-bottom:52px!important}.v-application .mb-14{margin-bottom:56px!important}.v-application .mb-15{margin-bottom:60px!important}.v-application .mb-16{margin-bottom:64px!important}.v-application .mb-auto{margin-bottom:auto!important}.v-application .ml-0{margin-left:0!important}.v-application .ml-1{margin-left:4px!important}.v-application .ml-2{margin-left:8px!important}.v-application .ml-3{margin-left:12px!important}.v-application .ml-4{margin-left:16px!important}.v-application .ml-5{margin-left:20px!important}.v-application .ml-6{margin-left:24px!important}.v-application .ml-7{margin-left:28px!important}.v-application .ml-8{margin-left:32px!important}.v-application .ml-9{margin-left:36px!important}.v-application .ml-10{margin-left:40px!important}.v-application .ml-11{margin-left:44px!important}.v-application .ml-12{margin-left:48px!important}.v-application .ml-13{margin-left:52px!important}.v-application .ml-14{margin-left:56px!important}.v-application .ml-15{margin-left:60px!important}.v-application .ml-16{margin-left:64px!important}.v-application .ml-auto{margin-left:auto!important}.v-application--is-ltr .ms-0{margin-left:0!important}.v-application--is-rtl .ms-0{margin-right:0!important}.v-application--is-ltr .ms-1{margin-left:4px!important}.v-application--is-rtl .ms-1{margin-right:4px!important}.v-application--is-ltr .ms-2{margin-left:8px!important}.v-application--is-rtl .ms-2{margin-right:8px!important}.v-application--is-ltr .ms-3{margin-left:12px!important}.v-application--is-rtl .ms-3{margin-right:12px!important}.v-application--is-ltr .ms-4{margin-left:16px!important}.v-application--is-rtl .ms-4{margin-right:16px!important}.v-application--is-ltr .ms-5{margin-left:20px!important}.v-application--is-rtl .ms-5{margin-right:20px!important}.v-application--is-ltr .ms-6{margin-left:24px!important}.v-application--is-rtl .ms-6{margin-right:24px!important}.v-application--is-ltr .ms-7{margin-left:28px!important}.v-application--is-rtl .ms-7{margin-right:28px!important}.v-application--is-ltr .ms-8{margin-left:32px!important}.v-application--is-rtl .ms-8{margin-right:32px!important}.v-application--is-ltr .ms-9{margin-left:36px!important}.v-application--is-rtl .ms-9{margin-right:36px!important}.v-application--is-ltr .ms-10{margin-left:40px!important}.v-application--is-rtl .ms-10{margin-right:40px!important}.v-application--is-ltr .ms-11{margin-left:44px!important}.v-application--is-rtl .ms-11{margin-right:44px!important}.v-application--is-ltr .ms-12{margin-left:48px!important}.v-application--is-rtl .ms-12{margin-right:48px!important}.v-application--is-ltr .ms-13{margin-left:52px!important}.v-application--is-rtl .ms-13{margin-right:52px!important}.v-application--is-ltr .ms-14{margin-left:56px!important}.v-application--is-rtl .ms-14{margin-right:56px!important}.v-application--is-ltr .ms-15{margin-left:60px!important}.v-application--is-rtl .ms-15{margin-right:60px!important}.v-application--is-ltr .ms-16{margin-left:64px!important}.v-application--is-rtl .ms-16{margin-right:64px!important}.v-application--is-ltr .ms-auto{margin-left:auto!important}.v-application--is-rtl .ms-auto{margin-right:auto!important}.v-application--is-ltr .me-0{margin-right:0!important}.v-application--is-rtl .me-0{margin-left:0!important}.v-application--is-ltr .me-1{margin-right:4px!important}.v-application--is-rtl .me-1{margin-left:4px!important}.v-application--is-ltr .me-2{margin-right:8px!important}.v-application--is-rtl .me-2{margin-left:8px!important}.v-application--is-ltr .me-3{margin-right:12px!important}.v-application--is-rtl .me-3{margin-left:12px!important}.v-application--is-ltr .me-4{margin-right:16px!important}.v-application--is-rtl .me-4{margin-left:16px!important}.v-application--is-ltr .me-5{margin-right:20px!important}.v-application--is-rtl .me-5{margin-left:20px!important}.v-application--is-ltr .me-6{margin-right:24px!important}.v-application--is-rtl .me-6{margin-left:24px!important}.v-application--is-ltr .me-7{margin-right:28px!important}.v-application--is-rtl .me-7{margin-left:28px!important}.v-application--is-ltr .me-8{margin-right:32px!important}.v-application--is-rtl .me-8{margin-left:32px!important}.v-application--is-ltr .me-9{margin-right:36px!important}.v-application--is-rtl .me-9{margin-left:36px!important}.v-application--is-ltr .me-10{margin-right:40px!important}.v-application--is-rtl .me-10{margin-left:40px!important}.v-application--is-ltr .me-11{margin-right:44px!important}.v-application--is-rtl .me-11{margin-left:44px!important}.v-application--is-ltr .me-12{margin-right:48px!important}.v-application--is-rtl .me-12{margin-left:48px!important}.v-application--is-ltr .me-13{margin-right:52px!important}.v-application--is-rtl .me-13{margin-left:52px!important}.v-application--is-ltr .me-14{margin-right:56px!important}.v-application--is-rtl .me-14{margin-left:56px!important}.v-application--is-ltr .me-15{margin-right:60px!important}.v-application--is-rtl .me-15{margin-left:60px!important}.v-application--is-ltr .me-16{margin-right:64px!important}.v-application--is-rtl .me-16{margin-left:64px!important}.v-application--is-ltr .me-auto{margin-right:auto!important}.v-application--is-rtl .me-auto{margin-left:auto!important}.v-application .ma-n1{margin:-4px!important}.v-application .ma-n2{margin:-8px!important}.v-application .ma-n3{margin:-12px!important}.v-application .ma-n4{margin:-16px!important}.v-application .ma-n5{margin:-20px!important}.v-application .ma-n6{margin:-24px!important}.v-application .ma-n7{margin:-28px!important}.v-application .ma-n8{margin:-32px!important}.v-application .ma-n9{margin:-36px!important}.v-application .ma-n10{margin:-40px!important}.v-application .ma-n11{margin:-44px!important}.v-application .ma-n12{margin:-48px!important}.v-application .ma-n13{margin:-52px!important}.v-application .ma-n14{margin:-56px!important}.v-application .ma-n15{margin:-60px!important}.v-application .ma-n16{margin:-64px!important}.v-application .mx-n1{margin-right:-4px!important;margin-left:-4px!important}.v-application .mx-n2{margin-right:-8px!important;margin-left:-8px!important}.v-application .mx-n3{margin-right:-12px!important;margin-left:-12px!important}.v-application .mx-n4{margin-right:-16px!important;margin-left:-16px!important}.v-application .mx-n5{margin-right:-20px!important;margin-left:-20px!important}.v-application .mx-n6{margin-right:-24px!important;margin-left:-24px!important}.v-application .mx-n7{margin-right:-28px!important;margin-left:-28px!important}.v-application .mx-n8{margin-right:-32px!important;margin-left:-32px!important}.v-application .mx-n9{margin-right:-36px!important;margin-left:-36px!important}.v-application .mx-n10{margin-right:-40px!important;margin-left:-40px!important}.v-application .mx-n11{margin-right:-44px!important;margin-left:-44px!important}.v-application .mx-n12{margin-right:-48px!important;margin-left:-48px!important}.v-application .mx-n13{margin-right:-52px!important;margin-left:-52px!important}.v-application .mx-n14{margin-right:-56px!important;margin-left:-56px!important}.v-application .mx-n15{margin-right:-60px!important;margin-left:-60px!important}.v-application .mx-n16{margin-right:-64px!important;margin-left:-64px!important}.v-application .my-n1{margin-top:-4px!important;margin-bottom:-4px!important}.v-application .my-n2{margin-top:-8px!important;margin-bottom:-8px!important}.v-application .my-n3{margin-top:-12px!important;margin-bottom:-12px!important}.v-application .my-n4{margin-top:-16px!important;margin-bottom:-16px!important}.v-application .my-n5{margin-top:-20px!important;margin-bottom:-20px!important}.v-application .my-n6{margin-top:-24px!important;margin-bottom:-24px!important}.v-application .my-n7{margin-top:-28px!important;margin-bottom:-28px!important}.v-application .my-n8{margin-top:-32px!important;margin-bottom:-32px!important}.v-application .my-n9{margin-top:-36px!important;margin-bottom:-36px!important}.v-application .my-n10{margin-top:-40px!important;margin-bottom:-40px!important}.v-application .my-n11{margin-top:-44px!important;margin-bottom:-44px!important}.v-application .my-n12{margin-top:-48px!important;margin-bottom:-48px!important}.v-application .my-n13{margin-top:-52px!important;margin-bottom:-52px!important}.v-application .my-n14{margin-top:-56px!important;margin-bottom:-56px!important}.v-application .my-n15{margin-top:-60px!important;margin-bottom:-60px!important}.v-application .my-n16{margin-top:-64px!important;margin-bottom:-64px!important}.v-application .mt-n1{margin-top:-4px!important}.v-application .mt-n2{margin-top:-8px!important}.v-application .mt-n3{margin-top:-12px!important}.v-application .mt-n4{margin-top:-16px!important}.v-application .mt-n5{margin-top:-20px!important}.v-application .mt-n6{margin-top:-24px!important}.v-application .mt-n7{margin-top:-28px!important}.v-application .mt-n8{margin-top:-32px!important}.v-application .mt-n9{margin-top:-36px!important}.v-application .mt-n10{margin-top:-40px!important}.v-application .mt-n11{margin-top:-44px!important}.v-application .mt-n12{margin-top:-48px!important}.v-application .mt-n13{margin-top:-52px!important}.v-application .mt-n14{margin-top:-56px!important}.v-application .mt-n15{margin-top:-60px!important}.v-application .mt-n16{margin-top:-64px!important}.v-application .mr-n1{margin-right:-4px!important}.v-application .mr-n2{margin-right:-8px!important}.v-application .mr-n3{margin-right:-12px!important}.v-application .mr-n4{margin-right:-16px!important}.v-application .mr-n5{margin-right:-20px!important}.v-application .mr-n6{margin-right:-24px!important}.v-application .mr-n7{margin-right:-28px!important}.v-application .mr-n8{margin-right:-32px!important}.v-application .mr-n9{margin-right:-36px!important}.v-application .mr-n10{margin-right:-40px!important}.v-application .mr-n11{margin-right:-44px!important}.v-application .mr-n12{margin-right:-48px!important}.v-application .mr-n13{margin-right:-52px!important}.v-application .mr-n14{margin-right:-56px!important}.v-application .mr-n15{margin-right:-60px!important}.v-application .mr-n16{margin-right:-64px!important}.v-application .mb-n1{margin-bottom:-4px!important}.v-application .mb-n2{margin-bottom:-8px!important}.v-application .mb-n3{margin-bottom:-12px!important}.v-application .mb-n4{margin-bottom:-16px!important}.v-application .mb-n5{margin-bottom:-20px!important}.v-application .mb-n6{margin-bottom:-24px!important}.v-application .mb-n7{margin-bottom:-28px!important}.v-application .mb-n8{margin-bottom:-32px!important}.v-application .mb-n9{margin-bottom:-36px!important}.v-application .mb-n10{margin-bottom:-40px!important}.v-application .mb-n11{margin-bottom:-44px!important}.v-application .mb-n12{margin-bottom:-48px!important}.v-application .mb-n13{margin-bottom:-52px!important}.v-application .mb-n14{margin-bottom:-56px!important}.v-application .mb-n15{margin-bottom:-60px!important}.v-application .mb-n16{margin-bottom:-64px!important}.v-application .ml-n1{margin-left:-4px!important}.v-application .ml-n2{margin-left:-8px!important}.v-application .ml-n3{margin-left:-12px!important}.v-application .ml-n4{margin-left:-16px!important}.v-application .ml-n5{margin-left:-20px!important}.v-application .ml-n6{margin-left:-24px!important}.v-application .ml-n7{margin-left:-28px!important}.v-application .ml-n8{margin-left:-32px!important}.v-application .ml-n9{margin-left:-36px!important}.v-application .ml-n10{margin-left:-40px!important}.v-application .ml-n11{margin-left:-44px!important}.v-application .ml-n12{margin-left:-48px!important}.v-application .ml-n13{margin-left:-52px!important}.v-application .ml-n14{margin-left:-56px!important}.v-application .ml-n15{margin-left:-60px!important}.v-application .ml-n16{margin-left:-64px!important}.v-application--is-ltr .ms-n1{margin-left:-4px!important}.v-application--is-rtl .ms-n1{margin-right:-4px!important}.v-application--is-ltr .ms-n2{margin-left:-8px!important}.v-application--is-rtl .ms-n2{margin-right:-8px!important}.v-application--is-ltr .ms-n3{margin-left:-12px!important}.v-application--is-rtl .ms-n3{margin-right:-12px!important}.v-application--is-ltr .ms-n4{margin-left:-16px!important}.v-application--is-rtl .ms-n4{margin-right:-16px!important}.v-application--is-ltr .ms-n5{margin-left:-20px!important}.v-application--is-rtl .ms-n5{margin-right:-20px!important}.v-application--is-ltr .ms-n6{margin-left:-24px!important}.v-application--is-rtl .ms-n6{margin-right:-24px!important}.v-application--is-ltr .ms-n7{margin-left:-28px!important}.v-application--is-rtl .ms-n7{margin-right:-28px!important}.v-application--is-ltr .ms-n8{margin-left:-32px!important}.v-application--is-rtl .ms-n8{margin-right:-32px!important}.v-application--is-ltr .ms-n9{margin-left:-36px!important}.v-application--is-rtl .ms-n9{margin-right:-36px!important}.v-application--is-ltr .ms-n10{margin-left:-40px!important}.v-application--is-rtl .ms-n10{margin-right:-40px!important}.v-application--is-ltr .ms-n11{margin-left:-44px!important}.v-application--is-rtl .ms-n11{margin-right:-44px!important}.v-application--is-ltr .ms-n12{margin-left:-48px!important}.v-application--is-rtl .ms-n12{margin-right:-48px!important}.v-application--is-ltr .ms-n13{margin-left:-52px!important}.v-application--is-rtl .ms-n13{margin-right:-52px!important}.v-application--is-ltr .ms-n14{margin-left:-56px!important}.v-application--is-rtl .ms-n14{margin-right:-56px!important}.v-application--is-ltr .ms-n15{margin-left:-60px!important}.v-application--is-rtl .ms-n15{margin-right:-60px!important}.v-application--is-ltr .ms-n16{margin-left:-64px!important}.v-application--is-rtl .ms-n16{margin-right:-64px!important}.v-application--is-ltr .me-n1{margin-right:-4px!important}.v-application--is-rtl .me-n1{margin-left:-4px!important}.v-application--is-ltr .me-n2{margin-right:-8px!important}.v-application--is-rtl .me-n2{margin-left:-8px!important}.v-application--is-ltr .me-n3{margin-right:-12px!important}.v-application--is-rtl .me-n3{margin-left:-12px!important}.v-application--is-ltr .me-n4{margin-right:-16px!important}.v-application--is-rtl .me-n4{margin-left:-16px!important}.v-application--is-ltr .me-n5{margin-right:-20px!important}.v-application--is-rtl .me-n5{margin-left:-20px!important}.v-application--is-ltr .me-n6{margin-right:-24px!important}.v-application--is-rtl .me-n6{margin-left:-24px!important}.v-application--is-ltr .me-n7{margin-right:-28px!important}.v-application--is-rtl .me-n7{margin-left:-28px!important}.v-application--is-ltr .me-n8{margin-right:-32px!important}.v-application--is-rtl .me-n8{margin-left:-32px!important}.v-application--is-ltr .me-n9{margin-right:-36px!important}.v-application--is-rtl .me-n9{margin-left:-36px!important}.v-application--is-ltr .me-n10{margin-right:-40px!important}.v-application--is-rtl .me-n10{margin-left:-40px!important}.v-application--is-ltr .me-n11{margin-right:-44px!important}.v-application--is-rtl .me-n11{margin-left:-44px!important}.v-application--is-ltr .me-n12{margin-right:-48px!important}.v-application--is-rtl .me-n12{margin-left:-48px!important}.v-application--is-ltr .me-n13{margin-right:-52px!important}.v-application--is-rtl .me-n13{margin-left:-52px!important}.v-application--is-ltr .me-n14{margin-right:-56px!important}.v-application--is-rtl .me-n14{margin-left:-56px!important}.v-application--is-ltr .me-n15{margin-right:-60px!important}.v-application--is-rtl .me-n15{margin-left:-60px!important}.v-application--is-ltr .me-n16{margin-right:-64px!important}.v-application--is-rtl .me-n16{margin-left:-64px!important}.v-application .pa-0{padding:0!important}.v-application .pa-1{padding:4px!important}.v-application .pa-2{padding:8px!important}.v-application .pa-3{padding:12px!important}.v-application .pa-4{padding:16px!important}.v-application .pa-5{padding:20px!important}.v-application .pa-6{padding:24px!important}.v-application .pa-7{padding:28px!important}.v-application .pa-8{padding:32px!important}.v-application .pa-9{padding:36px!important}.v-application .pa-10{padding:40px!important}.v-application .pa-11{padding:44px!important}.v-application .pa-12{padding:48px!important}.v-application .pa-13{padding:52px!important}.v-application .pa-14{padding:56px!important}.v-application .pa-15{padding:60px!important}.v-application .pa-16{padding:64px!important}.v-application .px-0{padding-right:0!important;padding-left:0!important}.v-application .px-1{padding-right:4px!important;padding-left:4px!important}.v-application .px-2{padding-right:8px!important;padding-left:8px!important}.v-application .px-3{padding-right:12px!important;padding-left:12px!important}.v-application .px-4{padding-right:16px!important;padding-left:16px!important}.v-application .px-5{padding-right:20px!important;padding-left:20px!important}.v-application .px-6{padding-right:24px!important;padding-left:24px!important}.v-application .px-7{padding-right:28px!important;padding-left:28px!important}.v-application .px-8{padding-right:32px!important;padding-left:32px!important}.v-application .px-9{padding-right:36px!important;padding-left:36px!important}.v-application .px-10{padding-right:40px!important;padding-left:40px!important}.v-application .px-11{padding-right:44px!important;padding-left:44px!important}.v-application .px-12{padding-right:48px!important;padding-left:48px!important}.v-application .px-13{padding-right:52px!important;padding-left:52px!important}.v-application .px-14{padding-right:56px!important;padding-left:56px!important}.v-application .px-15{padding-right:60px!important;padding-left:60px!important}.v-application .px-16{padding-right:64px!important;padding-left:64px!important}.v-application .py-0{padding-top:0!important;padding-bottom:0!important}.v-application .py-1{padding-top:4px!important;padding-bottom:4px!important}.v-application .py-2{padding-top:8px!important;padding-bottom:8px!important}.v-application .py-3{padding-top:12px!important;padding-bottom:12px!important}.v-application .py-4{padding-top:16px!important;padding-bottom:16px!important}.v-application .py-5{padding-top:20px!important;padding-bottom:20px!important}.v-application .py-6{padding-top:24px!important;padding-bottom:24px!important}.v-application .py-7{padding-top:28px!important;padding-bottom:28px!important}.v-application .py-8{padding-top:32px!important;padding-bottom:32px!important}.v-application .py-9{padding-top:36px!important;padding-bottom:36px!important}.v-application .py-10{padding-top:40px!important;padding-bottom:40px!important}.v-application .py-11{padding-top:44px!important;padding-bottom:44px!important}.v-application .py-12{padding-top:48px!important;padding-bottom:48px!important}.v-application .py-13{padding-top:52px!important;padding-bottom:52px!important}.v-application .py-14{padding-top:56px!important;padding-bottom:56px!important}.v-application .py-15{padding-top:60px!important;padding-bottom:60px!important}.v-application .py-16{padding-top:64px!important;padding-bottom:64px!important}.v-application .pt-0{padding-top:0!important}.v-application .pt-1{padding-top:4px!important}.v-application .pt-2{padding-top:8px!important}.v-application .pt-3{padding-top:12px!important}.v-application .pt-4{padding-top:16px!important}.v-application .pt-5{padding-top:20px!important}.v-application .pt-6{padding-top:24px!important}.v-application .pt-7{padding-top:28px!important}.v-application .pt-8{padding-top:32px!important}.v-application .pt-9{padding-top:36px!important}.v-application .pt-10{padding-top:40px!important}.v-application .pt-11{padding-top:44px!important}.v-application .pt-12{padding-top:48px!important}.v-application .pt-13{padding-top:52px!important}.v-application .pt-14{padding-top:56px!important}.v-application .pt-15{padding-top:60px!important}.v-application .pt-16{padding-top:64px!important}.v-application .pr-0{padding-right:0!important}.v-application .pr-1{padding-right:4px!important}.v-application .pr-2{padding-right:8px!important}.v-application .pr-3{padding-right:12px!important}.v-application .pr-4{padding-right:16px!important}.v-application .pr-5{padding-right:20px!important}.v-application .pr-6{padding-right:24px!important}.v-application .pr-7{padding-right:28px!important}.v-application .pr-8{padding-right:32px!important}.v-application .pr-9{padding-right:36px!important}.v-application .pr-10{padding-right:40px!important}.v-application .pr-11{padding-right:44px!important}.v-application .pr-12{padding-right:48px!important}.v-application .pr-13{padding-right:52px!important}.v-application .pr-14{padding-right:56px!important}.v-application .pr-15{padding-right:60px!important}.v-application .pr-16{padding-right:64px!important}.v-application .pb-0{padding-bottom:0!important}.v-application .pb-1{padding-bottom:4px!important}.v-application .pb-2{padding-bottom:8px!important}.v-application .pb-3{padding-bottom:12px!important}.v-application .pb-4{padding-bottom:16px!important}.v-application .pb-5{padding-bottom:20px!important}.v-application .pb-6{padding-bottom:24px!important}.v-application .pb-7{padding-bottom:28px!important}.v-application .pb-8{padding-bottom:32px!important}.v-application .pb-9{padding-bottom:36px!important}.v-application .pb-10{padding-bottom:40px!important}.v-application .pb-11{padding-bottom:44px!important}.v-application .pb-12{padding-bottom:48px!important}.v-application .pb-13{padding-bottom:52px!important}.v-application .pb-14{padding-bottom:56px!important}.v-application .pb-15{padding-bottom:60px!important}.v-application .pb-16{padding-bottom:64px!important}.v-application .pl-0{padding-left:0!important}.v-application .pl-1{padding-left:4px!important}.v-application .pl-2{padding-left:8px!important}.v-application .pl-3{padding-left:12px!important}.v-application .pl-4{padding-left:16px!important}.v-application .pl-5{padding-left:20px!important}.v-application .pl-6{padding-left:24px!important}.v-application .pl-7{padding-left:28px!important}.v-application .pl-8{padding-left:32px!important}.v-application .pl-9{padding-left:36px!important}.v-application .pl-10{padding-left:40px!important}.v-application .pl-11{padding-left:44px!important}.v-application .pl-12{padding-left:48px!important}.v-application .pl-13{padding-left:52px!important}.v-application .pl-14{padding-left:56px!important}.v-application .pl-15{padding-left:60px!important}.v-application .pl-16{padding-left:64px!important}.v-application--is-ltr .ps-0{padding-left:0!important}.v-application--is-rtl .ps-0{padding-right:0!important}.v-application--is-ltr .ps-1{padding-left:4px!important}.v-application--is-rtl .ps-1{padding-right:4px!important}.v-application--is-ltr .ps-2{padding-left:8px!important}.v-application--is-rtl .ps-2{padding-right:8px!important}.v-application--is-ltr .ps-3{padding-left:12px!important}.v-application--is-rtl .ps-3{padding-right:12px!important}.v-application--is-ltr .ps-4{padding-left:16px!important}.v-application--is-rtl .ps-4{padding-right:16px!important}.v-application--is-ltr .ps-5{padding-left:20px!important}.v-application--is-rtl .ps-5{padding-right:20px!important}.v-application--is-ltr .ps-6{padding-left:24px!important}.v-application--is-rtl .ps-6{padding-right:24px!important}.v-application--is-ltr .ps-7{padding-left:28px!important}.v-application--is-rtl .ps-7{padding-right:28px!important}.v-application--is-ltr .ps-8{padding-left:32px!important}.v-application--is-rtl .ps-8{padding-right:32px!important}.v-application--is-ltr .ps-9{padding-left:36px!important}.v-application--is-rtl .ps-9{padding-right:36px!important}.v-application--is-ltr .ps-10{padding-left:40px!important}.v-application--is-rtl .ps-10{padding-right:40px!important}.v-application--is-ltr .ps-11{padding-left:44px!important}.v-application--is-rtl .ps-11{padding-right:44px!important}.v-application--is-ltr .ps-12{padding-left:48px!important}.v-application--is-rtl .ps-12{padding-right:48px!important}.v-application--is-ltr .ps-13{padding-left:52px!important}.v-application--is-rtl .ps-13{padding-right:52px!important}.v-application--is-ltr .ps-14{padding-left:56px!important}.v-application--is-rtl .ps-14{padding-right:56px!important}.v-application--is-ltr .ps-15{padding-left:60px!important}.v-application--is-rtl .ps-15{padding-right:60px!important}.v-application--is-ltr .ps-16{padding-left:64px!important}.v-application--is-rtl .ps-16{padding-right:64px!important}.v-application--is-ltr .pe-0{padding-right:0!important}.v-application--is-rtl .pe-0{padding-left:0!important}.v-application--is-ltr .pe-1{padding-right:4px!important}.v-application--is-rtl .pe-1{padding-left:4px!important}.v-application--is-ltr .pe-2{padding-right:8px!important}.v-application--is-rtl .pe-2{padding-left:8px!important}.v-application--is-ltr .pe-3{padding-right:12px!important}.v-application--is-rtl .pe-3{padding-left:12px!important}.v-application--is-ltr .pe-4{padding-right:16px!important}.v-application--is-rtl .pe-4{padding-left:16px!important}.v-application--is-ltr .pe-5{padding-right:20px!important}.v-application--is-rtl .pe-5{padding-left:20px!important}.v-application--is-ltr .pe-6{padding-right:24px!important}.v-application--is-rtl .pe-6{padding-left:24px!important}.v-application--is-ltr .pe-7{padding-right:28px!important}.v-application--is-rtl .pe-7{padding-left:28px!important}.v-application--is-ltr .pe-8{padding-right:32px!important}.v-application--is-rtl .pe-8{padding-left:32px!important}.v-application--is-ltr .pe-9{padding-right:36px!important}.v-application--is-rtl .pe-9{padding-left:36px!important}.v-application--is-ltr .pe-10{padding-right:40px!important}.v-application--is-rtl .pe-10{padding-left:40px!important}.v-application--is-ltr .pe-11{padding-right:44px!important}.v-application--is-rtl .pe-11{padding-left:44px!important}.v-application--is-ltr .pe-12{padding-right:48px!important}.v-application--is-rtl .pe-12{padding-left:48px!important}.v-application--is-ltr .pe-13{padding-right:52px!important}.v-application--is-rtl .pe-13{padding-left:52px!important}.v-application--is-ltr .pe-14{padding-right:56px!important}.v-application--is-rtl .pe-14{padding-left:56px!important}.v-application--is-ltr .pe-15{padding-right:60px!important}.v-application--is-rtl .pe-15{padding-left:60px!important}.v-application--is-ltr .pe-16{padding-right:64px!important}.v-application--is-rtl .pe-16{padding-left:64px!important}.v-application .rounded-0{border-radius:0!important}.v-application .rounded-sm{border-radius:2px!important}.v-application .rounded{border-radius:4px!important}.v-application .rounded-lg{border-radius:8px!important}.v-application .rounded-xl{border-radius:24px!important}.v-application .rounded-pill{border-radius:9999px!important}.v-application .rounded-circle{border-radius:50%!important}.v-application .rounded-t-0{border-top-left-radius:0!important;border-top-right-radius:0!important}.v-application .rounded-t-sm{border-top-left-radius:2px!important;border-top-right-radius:2px!important}.v-application .rounded-t{border-top-left-radius:4px!important;border-top-right-radius:4px!important}.v-application .rounded-t-lg{border-top-left-radius:8px!important;border-top-right-radius:8px!important}.v-application .rounded-t-xl{border-top-left-radius:24px!important;border-top-right-radius:24px!important}.v-application .rounded-t-pill{border-top-left-radius:9999px!important;border-top-right-radius:9999px!important}.v-application .rounded-t-circle{border-top-left-radius:50%!important;border-top-right-radius:50%!important}.v-application .rounded-r-0{border-top-right-radius:0!important;border-bottom-right-radius:0!important}.v-application .rounded-r-sm{border-top-right-radius:2px!important;border-bottom-right-radius:2px!important}.v-application .rounded-r{border-top-right-radius:4px!important;border-bottom-right-radius:4px!important}.v-application .rounded-r-lg{border-top-right-radius:8px!important;border-bottom-right-radius:8px!important}.v-application .rounded-r-xl{border-top-right-radius:24px!important;border-bottom-right-radius:24px!important}.v-application .rounded-r-pill{border-top-right-radius:9999px!important;border-bottom-right-radius:9999px!important}.v-application .rounded-r-circle{border-top-right-radius:50%!important;border-bottom-right-radius:50%!important}.v-application .rounded-b-0{border-bottom-left-radius:0!important;border-bottom-right-radius:0!important}.v-application .rounded-b-sm{border-bottom-left-radius:2px!important;border-bottom-right-radius:2px!important}.v-application .rounded-b{border-bottom-left-radius:4px!important;border-bottom-right-radius:4px!important}.v-application .rounded-b-lg{border-bottom-left-radius:8px!important;border-bottom-right-radius:8px!important}.v-application .rounded-b-xl{border-bottom-left-radius:24px!important;border-bottom-right-radius:24px!important}.v-application .rounded-b-pill{border-bottom-left-radius:9999px!important;border-bottom-right-radius:9999px!important}.v-application .rounded-b-circle{border-bottom-left-radius:50%!important;border-bottom-right-radius:50%!important}.v-application .rounded-l-0{border-top-left-radius:0!important;border-bottom-left-radius:0!important}.v-application .rounded-l-sm{border-top-left-radius:2px!important;border-bottom-left-radius:2px!important}.v-application .rounded-l{border-top-left-radius:4px!important;border-bottom-left-radius:4px!important}.v-application .rounded-l-lg{border-top-left-radius:8px!important;border-bottom-left-radius:8px!important}.v-application .rounded-l-xl{border-top-left-radius:24px!important;border-bottom-left-radius:24px!important}.v-application .rounded-l-pill{border-top-left-radius:9999px!important;border-bottom-left-radius:9999px!important}.v-application .rounded-l-circle{border-top-left-radius:50%!important;border-bottom-left-radius:50%!important}.v-application .rounded-tl-0{border-top-left-radius:0!important}.v-application .rounded-tl-sm{border-top-left-radius:2px!important}.v-application .rounded-tl{border-top-left-radius:4px!important}.v-application .rounded-tl-lg{border-top-left-radius:8px!important}.v-application .rounded-tl-xl{border-top-left-radius:24px!important}.v-application .rounded-tl-pill{border-top-left-radius:9999px!important}.v-application .rounded-tl-circle{border-top-left-radius:50%!important}.v-application .rounded-tr-0{border-top-right-radius:0!important}.v-application .rounded-tr-sm{border-top-right-radius:2px!important}.v-application .rounded-tr{border-top-right-radius:4px!important}.v-application .rounded-tr-lg{border-top-right-radius:8px!important}.v-application .rounded-tr-xl{border-top-right-radius:24px!important}.v-application .rounded-tr-pill{border-top-right-radius:9999px!important}.v-application .rounded-tr-circle{border-top-right-radius:50%!important}.v-application .rounded-br-0{border-bottom-right-radius:0!important}.v-application .rounded-br-sm{border-bottom-right-radius:2px!important}.v-application .rounded-br{border-bottom-right-radius:4px!important}.v-application .rounded-br-lg{border-bottom-right-radius:8px!important}.v-application .rounded-br-xl{border-bottom-right-radius:24px!important}.v-application .rounded-br-pill{border-bottom-right-radius:9999px!important}.v-application .rounded-br-circle{border-bottom-right-radius:50%!important}.v-application .rounded-bl-0{border-bottom-left-radius:0!important}.v-application .rounded-bl-sm{border-bottom-left-radius:2px!important}.v-application .rounded-bl{border-bottom-left-radius:4px!important}.v-application .rounded-bl-lg{border-bottom-left-radius:8px!important}.v-application .rounded-bl-xl{border-bottom-left-radius:24px!important}.v-application .rounded-bl-pill{border-bottom-left-radius:9999px!important}.v-application .rounded-bl-circle{border-bottom-left-radius:50%!important}.v-application .text-left{text-align:left!important}.v-application .text-right{text-align:right!important}.v-application .text-center{text-align:center!important}.v-application .text-justify{text-align:justify!important}.v-application .text-start{text-align:start!important}.v-application .text-end{text-align:end!important}.v-application .text-decoration-line-through{text-decoration:line-through!important}.v-application .text-decoration-none{text-decoration:none!important}.v-application .text-decoration-overline{text-decoration:overline!important}.v-application .text-decoration-underline{text-decoration:underline!important}.v-application .text-wrap{white-space:normal!important}.v-application .text-no-wrap{white-space:nowrap!important}.v-application .text-pre{white-space:pre!important}.v-application .text-pre-line{white-space:pre-line!important}.v-application .text-pre-wrap{white-space:pre-wrap!important}.v-application .text-break{overflow-wrap:break-word!important;word-break:break-word!important}.v-application .text-truncate{white-space:nowrap!important;overflow:hidden!important;text-overflow:ellipsis!important}.v-application .text-none{text-transform:none!important}.v-application .text-capitalize{text-transform:capitalize!important}.v-application .text-lowercase{text-transform:lowercase!important}.v-application .text-uppercase{text-transform:uppercase!important}.v-application .text-h1{font-size:6rem!important;line-height:6rem;letter-spacing:-.015625em!important}.v-application .text-h1,.v-application .text-h2{font-weight:300;font-family:Roboto,sans-serif!important}.v-application .text-h2{font-size:3.75rem!important;line-height:3.75rem;letter-spacing:-.0083333333em!important}.v-application .text-h3{font-size:3rem!important;line-height:3.125rem;letter-spacing:normal!important}.v-application .text-h3,.v-application .text-h4{font-weight:400;font-family:Roboto,sans-serif!important}.v-application .text-h4{font-size:2.125rem!important;line-height:2.5rem;letter-spacing:.0073529412em!important}.v-application .text-h5{font-size:1.5rem!important;font-weight:400;letter-spacing:normal!important}.v-application .text-h5,.v-application .text-h6{line-height:2rem;font-family:Roboto,sans-serif!important}.v-application .text-h6{font-size:1.25rem!important;font-weight:500;letter-spacing:.0125em!important}.v-application .text-subtitle-1{font-size:1rem!important;font-weight:400;line-height:1.75rem;letter-spacing:.009375em!important;font-family:Roboto,sans-serif!important}.v-application .text-subtitle-2{font-size:.875rem!important;font-weight:500;line-height:1.375rem;letter-spacing:.0071428571em!important;font-family:Roboto,sans-serif!important}.v-application .text-body-1{font-size:1rem!important;font-weight:400;line-height:1.5rem;letter-spacing:.03125em!important;font-family:Roboto,sans-serif!important}.v-application .text-body-2{font-weight:400;line-height:1.25rem;letter-spacing:.0178571429em!important}.v-application .text-body-2,.v-application .text-button{font-size:.875rem!important;font-family:Roboto,sans-serif!important}.v-application .text-button{font-weight:500;line-height:2.25rem;letter-spacing:.0892857143em!important;text-transform:uppercase!important}.v-application .text-caption{font-weight:400;line-height:1.25rem;letter-spacing:.0333333333em!important}.v-application .text-caption,.v-application .text-overline{font-size:.75rem!important;font-family:Roboto,sans-serif!important}.v-application .text-overline{font-weight:500;line-height:2rem;letter-spacing:.1666666667em!important;text-transform:uppercase!important}@media(min-width:600px){.v-application .d-sm-none{display:none!important}.v-application .d-sm-inline{display:inline!important}.v-application .d-sm-inline-block{display:inline-block!important}.v-application .d-sm-block{display:block!important}.v-application .d-sm-table{display:table!important}.v-application .d-sm-table-row{display:table-row!important}.v-application .d-sm-table-cell{display:table-cell!important}.v-application .d-sm-flex{display:flex!important}.v-application .d-sm-inline-flex{display:inline-flex!important}.v-application .float-sm-none{float:none!important}.v-application .float-sm-left{float:left!important}.v-application .float-sm-right{float:right!important}.v-application--is-rtl .float-sm-end{float:left!important}.v-application--is-ltr .float-sm-end,.v-application--is-rtl .float-sm-start{float:right!important}.v-application--is-ltr .float-sm-start{float:left!important}.v-application .flex-sm-fill{flex:1 1 auto!important}.v-application .flex-sm-row{flex-direction:row!important}.v-application .flex-sm-column{flex-direction:column!important}.v-application .flex-sm-row-reverse{flex-direction:row-reverse!important}.v-application .flex-sm-column-reverse{flex-direction:column-reverse!important}.v-application .flex-sm-grow-0{flex-grow:0!important}.v-application .flex-sm-grow-1{flex-grow:1!important}.v-application .flex-sm-shrink-0{flex-shrink:0!important}.v-application .flex-sm-shrink-1{flex-shrink:1!important}.v-application .flex-sm-wrap{flex-wrap:wrap!important}.v-application .flex-sm-nowrap{flex-wrap:nowrap!important}.v-application .flex-sm-wrap-reverse{flex-wrap:wrap-reverse!important}.v-application .justify-sm-start{justify-content:flex-start!important}.v-application .justify-sm-end{justify-content:flex-end!important}.v-application .justify-sm-center{justify-content:center!important}.v-application .justify-sm-space-between{justify-content:space-between!important}.v-application .justify-sm-space-around{justify-content:space-around!important}.v-application .align-sm-start{align-items:flex-start!important}.v-application .align-sm-end{align-items:flex-end!important}.v-application .align-sm-center{align-items:center!important}.v-application .align-sm-baseline{align-items:baseline!important}.v-application .align-sm-stretch{align-items:stretch!important}.v-application .align-content-sm-start{align-content:flex-start!important}.v-application .align-content-sm-end{align-content:flex-end!important}.v-application .align-content-sm-center{align-content:center!important}.v-application .align-content-sm-space-between{align-content:space-between!important}.v-application .align-content-sm-space-around{align-content:space-around!important}.v-application .align-content-sm-stretch{align-content:stretch!important}.v-application .align-self-sm-auto{align-self:auto!important}.v-application .align-self-sm-start{align-self:flex-start!important}.v-application .align-self-sm-end{align-self:flex-end!important}.v-application .align-self-sm-center{align-self:center!important}.v-application .align-self-sm-baseline{align-self:baseline!important}.v-application .align-self-sm-stretch{align-self:stretch!important}.v-application .order-sm-first{order:-1!important}.v-application .order-sm-0{order:0!important}.v-application .order-sm-1{order:1!important}.v-application .order-sm-2{order:2!important}.v-application .order-sm-3{order:3!important}.v-application .order-sm-4{order:4!important}.v-application .order-sm-5{order:5!important}.v-application .order-sm-6{order:6!important}.v-application .order-sm-7{order:7!important}.v-application .order-sm-8{order:8!important}.v-application .order-sm-9{order:9!important}.v-application .order-sm-10{order:10!important}.v-application .order-sm-11{order:11!important}.v-application .order-sm-12{order:12!important}.v-application .order-sm-last{order:13!important}.v-application .ma-sm-0{margin:0!important}.v-application .ma-sm-1{margin:4px!important}.v-application .ma-sm-2{margin:8px!important}.v-application .ma-sm-3{margin:12px!important}.v-application .ma-sm-4{margin:16px!important}.v-application .ma-sm-5{margin:20px!important}.v-application .ma-sm-6{margin:24px!important}.v-application .ma-sm-7{margin:28px!important}.v-application .ma-sm-8{margin:32px!important}.v-application .ma-sm-9{margin:36px!important}.v-application .ma-sm-10{margin:40px!important}.v-application .ma-sm-11{margin:44px!important}.v-application .ma-sm-12{margin:48px!important}.v-application .ma-sm-13{margin:52px!important}.v-application .ma-sm-14{margin:56px!important}.v-application .ma-sm-15{margin:60px!important}.v-application .ma-sm-16{margin:64px!important}.v-application .ma-sm-auto{margin:auto!important}.v-application .mx-sm-0{margin-right:0!important;margin-left:0!important}.v-application .mx-sm-1{margin-right:4px!important;margin-left:4px!important}.v-application .mx-sm-2{margin-right:8px!important;margin-left:8px!important}.v-application .mx-sm-3{margin-right:12px!important;margin-left:12px!important}.v-application .mx-sm-4{margin-right:16px!important;margin-left:16px!important}.v-application .mx-sm-5{margin-right:20px!important;margin-left:20px!important}.v-application .mx-sm-6{margin-right:24px!important;margin-left:24px!important}.v-application .mx-sm-7{margin-right:28px!important;margin-left:28px!important}.v-application .mx-sm-8{margin-right:32px!important;margin-left:32px!important}.v-application .mx-sm-9{margin-right:36px!important;margin-left:36px!important}.v-application .mx-sm-10{margin-right:40px!important;margin-left:40px!important}.v-application .mx-sm-11{margin-right:44px!important;margin-left:44px!important}.v-application .mx-sm-12{margin-right:48px!important;margin-left:48px!important}.v-application .mx-sm-13{margin-right:52px!important;margin-left:52px!important}.v-application .mx-sm-14{margin-right:56px!important;margin-left:56px!important}.v-application .mx-sm-15{margin-right:60px!important;margin-left:60px!important}.v-application .mx-sm-16{margin-right:64px!important;margin-left:64px!important}.v-application .mx-sm-auto{margin-right:auto!important;margin-left:auto!important}.v-application .my-sm-0{margin-top:0!important;margin-bottom:0!important}.v-application .my-sm-1{margin-top:4px!important;margin-bottom:4px!important}.v-application .my-sm-2{margin-top:8px!important;margin-bottom:8px!important}.v-application .my-sm-3{margin-top:12px!important;margin-bottom:12px!important}.v-application .my-sm-4{margin-top:16px!important;margin-bottom:16px!important}.v-application .my-sm-5{margin-top:20px!important;margin-bottom:20px!important}.v-application .my-sm-6{margin-top:24px!important;margin-bottom:24px!important}.v-application .my-sm-7{margin-top:28px!important;margin-bottom:28px!important}.v-application .my-sm-8{margin-top:32px!important;margin-bottom:32px!important}.v-application .my-sm-9{margin-top:36px!important;margin-bottom:36px!important}.v-application .my-sm-10{margin-top:40px!important;margin-bottom:40px!important}.v-application .my-sm-11{margin-top:44px!important;margin-bottom:44px!important}.v-application .my-sm-12{margin-top:48px!important;margin-bottom:48px!important}.v-application .my-sm-13{margin-top:52px!important;margin-bottom:52px!important}.v-application .my-sm-14{margin-top:56px!important;margin-bottom:56px!important}.v-application .my-sm-15{margin-top:60px!important;margin-bottom:60px!important}.v-application .my-sm-16{margin-top:64px!important;margin-bottom:64px!important}.v-application .my-sm-auto{margin-top:auto!important;margin-bottom:auto!important}.v-application .mt-sm-0{margin-top:0!important}.v-application .mt-sm-1{margin-top:4px!important}.v-application .mt-sm-2{margin-top:8px!important}.v-application .mt-sm-3{margin-top:12px!important}.v-application .mt-sm-4{margin-top:16px!important}.v-application .mt-sm-5{margin-top:20px!important}.v-application .mt-sm-6{margin-top:24px!important}.v-application .mt-sm-7{margin-top:28px!important}.v-application .mt-sm-8{margin-top:32px!important}.v-application .mt-sm-9{margin-top:36px!important}.v-application .mt-sm-10{margin-top:40px!important}.v-application .mt-sm-11{margin-top:44px!important}.v-application .mt-sm-12{margin-top:48px!important}.v-application .mt-sm-13{margin-top:52px!important}.v-application .mt-sm-14{margin-top:56px!important}.v-application .mt-sm-15{margin-top:60px!important}.v-application .mt-sm-16{margin-top:64px!important}.v-application .mt-sm-auto{margin-top:auto!important}.v-application .mr-sm-0{margin-right:0!important}.v-application .mr-sm-1{margin-right:4px!important}.v-application .mr-sm-2{margin-right:8px!important}.v-application .mr-sm-3{margin-right:12px!important}.v-application .mr-sm-4{margin-right:16px!important}.v-application .mr-sm-5{margin-right:20px!important}.v-application .mr-sm-6{margin-right:24px!important}.v-application .mr-sm-7{margin-right:28px!important}.v-application .mr-sm-8{margin-right:32px!important}.v-application .mr-sm-9{margin-right:36px!important}.v-application .mr-sm-10{margin-right:40px!important}.v-application .mr-sm-11{margin-right:44px!important}.v-application .mr-sm-12{margin-right:48px!important}.v-application .mr-sm-13{margin-right:52px!important}.v-application .mr-sm-14{margin-right:56px!important}.v-application .mr-sm-15{margin-right:60px!important}.v-application .mr-sm-16{margin-right:64px!important}.v-application .mr-sm-auto{margin-right:auto!important}.v-application .mb-sm-0{margin-bottom:0!important}.v-application .mb-sm-1{margin-bottom:4px!important}.v-application .mb-sm-2{margin-bottom:8px!important}.v-application .mb-sm-3{margin-bottom:12px!important}.v-application .mb-sm-4{margin-bottom:16px!important}.v-application .mb-sm-5{margin-bottom:20px!important}.v-application .mb-sm-6{margin-bottom:24px!important}.v-application .mb-sm-7{margin-bottom:28px!important}.v-application .mb-sm-8{margin-bottom:32px!important}.v-application .mb-sm-9{margin-bottom:36px!important}.v-application .mb-sm-10{margin-bottom:40px!important}.v-application .mb-sm-11{margin-bottom:44px!important}.v-application .mb-sm-12{margin-bottom:48px!important}.v-application .mb-sm-13{margin-bottom:52px!important}.v-application .mb-sm-14{margin-bottom:56px!important}.v-application .mb-sm-15{margin-bottom:60px!important}.v-application .mb-sm-16{margin-bottom:64px!important}.v-application .mb-sm-auto{margin-bottom:auto!important}.v-application .ml-sm-0{margin-left:0!important}.v-application .ml-sm-1{margin-left:4px!important}.v-application .ml-sm-2{margin-left:8px!important}.v-application .ml-sm-3{margin-left:12px!important}.v-application .ml-sm-4{margin-left:16px!important}.v-application .ml-sm-5{margin-left:20px!important}.v-application .ml-sm-6{margin-left:24px!important}.v-application .ml-sm-7{margin-left:28px!important}.v-application .ml-sm-8{margin-left:32px!important}.v-application .ml-sm-9{margin-left:36px!important}.v-application .ml-sm-10{margin-left:40px!important}.v-application .ml-sm-11{margin-left:44px!important}.v-application .ml-sm-12{margin-left:48px!important}.v-application .ml-sm-13{margin-left:52px!important}.v-application .ml-sm-14{margin-left:56px!important}.v-application .ml-sm-15{margin-left:60px!important}.v-application .ml-sm-16{margin-left:64px!important}.v-application .ml-sm-auto{margin-left:auto!important}.v-application--is-ltr .ms-sm-0{margin-left:0!important}.v-application--is-rtl .ms-sm-0{margin-right:0!important}.v-application--is-ltr .ms-sm-1{margin-left:4px!important}.v-application--is-rtl .ms-sm-1{margin-right:4px!important}.v-application--is-ltr .ms-sm-2{margin-left:8px!important}.v-application--is-rtl .ms-sm-2{margin-right:8px!important}.v-application--is-ltr .ms-sm-3{margin-left:12px!important}.v-application--is-rtl .ms-sm-3{margin-right:12px!important}.v-application--is-ltr .ms-sm-4{margin-left:16px!important}.v-application--is-rtl .ms-sm-4{margin-right:16px!important}.v-application--is-ltr .ms-sm-5{margin-left:20px!important}.v-application--is-rtl .ms-sm-5{margin-right:20px!important}.v-application--is-ltr .ms-sm-6{margin-left:24px!important}.v-application--is-rtl .ms-sm-6{margin-right:24px!important}.v-application--is-ltr .ms-sm-7{margin-left:28px!important}.v-application--is-rtl .ms-sm-7{margin-right:28px!important}.v-application--is-ltr .ms-sm-8{margin-left:32px!important}.v-application--is-rtl .ms-sm-8{margin-right:32px!important}.v-application--is-ltr .ms-sm-9{margin-left:36px!important}.v-application--is-rtl .ms-sm-9{margin-right:36px!important}.v-application--is-ltr .ms-sm-10{margin-left:40px!important}.v-application--is-rtl .ms-sm-10{margin-right:40px!important}.v-application--is-ltr .ms-sm-11{margin-left:44px!important}.v-application--is-rtl .ms-sm-11{margin-right:44px!important}.v-application--is-ltr .ms-sm-12{margin-left:48px!important}.v-application--is-rtl .ms-sm-12{margin-right:48px!important}.v-application--is-ltr .ms-sm-13{margin-left:52px!important}.v-application--is-rtl .ms-sm-13{margin-right:52px!important}.v-application--is-ltr .ms-sm-14{margin-left:56px!important}.v-application--is-rtl .ms-sm-14{margin-right:56px!important}.v-application--is-ltr .ms-sm-15{margin-left:60px!important}.v-application--is-rtl .ms-sm-15{margin-right:60px!important}.v-application--is-ltr .ms-sm-16{margin-left:64px!important}.v-application--is-rtl .ms-sm-16{margin-right:64px!important}.v-application--is-ltr .ms-sm-auto{margin-left:auto!important}.v-application--is-rtl .ms-sm-auto{margin-right:auto!important}.v-application--is-ltr .me-sm-0{margin-right:0!important}.v-application--is-rtl .me-sm-0{margin-left:0!important}.v-application--is-ltr .me-sm-1{margin-right:4px!important}.v-application--is-rtl .me-sm-1{margin-left:4px!important}.v-application--is-ltr .me-sm-2{margin-right:8px!important}.v-application--is-rtl .me-sm-2{margin-left:8px!important}.v-application--is-ltr .me-sm-3{margin-right:12px!important}.v-application--is-rtl .me-sm-3{margin-left:12px!important}.v-application--is-ltr .me-sm-4{margin-right:16px!important}.v-application--is-rtl .me-sm-4{margin-left:16px!important}.v-application--is-ltr .me-sm-5{margin-right:20px!important}.v-application--is-rtl .me-sm-5{margin-left:20px!important}.v-application--is-ltr .me-sm-6{margin-right:24px!important}.v-application--is-rtl .me-sm-6{margin-left:24px!important}.v-application--is-ltr .me-sm-7{margin-right:28px!important}.v-application--is-rtl .me-sm-7{margin-left:28px!important}.v-application--is-ltr .me-sm-8{margin-right:32px!important}.v-application--is-rtl .me-sm-8{margin-left:32px!important}.v-application--is-ltr .me-sm-9{margin-right:36px!important}.v-application--is-rtl .me-sm-9{margin-left:36px!important}.v-application--is-ltr .me-sm-10{margin-right:40px!important}.v-application--is-rtl .me-sm-10{margin-left:40px!important}.v-application--is-ltr .me-sm-11{margin-right:44px!important}.v-application--is-rtl .me-sm-11{margin-left:44px!important}.v-application--is-ltr .me-sm-12{margin-right:48px!important}.v-application--is-rtl .me-sm-12{margin-left:48px!important}.v-application--is-ltr .me-sm-13{margin-right:52px!important}.v-application--is-rtl .me-sm-13{margin-left:52px!important}.v-application--is-ltr .me-sm-14{margin-right:56px!important}.v-application--is-rtl .me-sm-14{margin-left:56px!important}.v-application--is-ltr .me-sm-15{margin-right:60px!important}.v-application--is-rtl .me-sm-15{margin-left:60px!important}.v-application--is-ltr .me-sm-16{margin-right:64px!important}.v-application--is-rtl .me-sm-16{margin-left:64px!important}.v-application--is-ltr .me-sm-auto{margin-right:auto!important}.v-application--is-rtl .me-sm-auto{margin-left:auto!important}.v-application .ma-sm-n1{margin:-4px!important}.v-application .ma-sm-n2{margin:-8px!important}.v-application .ma-sm-n3{margin:-12px!important}.v-application .ma-sm-n4{margin:-16px!important}.v-application .ma-sm-n5{margin:-20px!important}.v-application .ma-sm-n6{margin:-24px!important}.v-application .ma-sm-n7{margin:-28px!important}.v-application .ma-sm-n8{margin:-32px!important}.v-application .ma-sm-n9{margin:-36px!important}.v-application .ma-sm-n10{margin:-40px!important}.v-application .ma-sm-n11{margin:-44px!important}.v-application .ma-sm-n12{margin:-48px!important}.v-application .ma-sm-n13{margin:-52px!important}.v-application .ma-sm-n14{margin:-56px!important}.v-application .ma-sm-n15{margin:-60px!important}.v-application .ma-sm-n16{margin:-64px!important}.v-application .mx-sm-n1{margin-right:-4px!important;margin-left:-4px!important}.v-application .mx-sm-n2{margin-right:-8px!important;margin-left:-8px!important}.v-application .mx-sm-n3{margin-right:-12px!important;margin-left:-12px!important}.v-application .mx-sm-n4{margin-right:-16px!important;margin-left:-16px!important}.v-application .mx-sm-n5{margin-right:-20px!important;margin-left:-20px!important}.v-application .mx-sm-n6{margin-right:-24px!important;margin-left:-24px!important}.v-application .mx-sm-n7{margin-right:-28px!important;margin-left:-28px!important}.v-application .mx-sm-n8{margin-right:-32px!important;margin-left:-32px!important}.v-application .mx-sm-n9{margin-right:-36px!important;margin-left:-36px!important}.v-application .mx-sm-n10{margin-right:-40px!important;margin-left:-40px!important}.v-application .mx-sm-n11{margin-right:-44px!important;margin-left:-44px!important}.v-application .mx-sm-n12{margin-right:-48px!important;margin-left:-48px!important}.v-application .mx-sm-n13{margin-right:-52px!important;margin-left:-52px!important}.v-application .mx-sm-n14{margin-right:-56px!important;margin-left:-56px!important}.v-application .mx-sm-n15{margin-right:-60px!important;margin-left:-60px!important}.v-application .mx-sm-n16{margin-right:-64px!important;margin-left:-64px!important}.v-application .my-sm-n1{margin-top:-4px!important;margin-bottom:-4px!important}.v-application .my-sm-n2{margin-top:-8px!important;margin-bottom:-8px!important}.v-application .my-sm-n3{margin-top:-12px!important;margin-bottom:-12px!important}.v-application .my-sm-n4{margin-top:-16px!important;margin-bottom:-16px!important}.v-application .my-sm-n5{margin-top:-20px!important;margin-bottom:-20px!important}.v-application .my-sm-n6{margin-top:-24px!important;margin-bottom:-24px!important}.v-application .my-sm-n7{margin-top:-28px!important;margin-bottom:-28px!important}.v-application .my-sm-n8{margin-top:-32px!important;margin-bottom:-32px!important}.v-application .my-sm-n9{margin-top:-36px!important;margin-bottom:-36px!important}.v-application .my-sm-n10{margin-top:-40px!important;margin-bottom:-40px!important}.v-application .my-sm-n11{margin-top:-44px!important;margin-bottom:-44px!important}.v-application .my-sm-n12{margin-top:-48px!important;margin-bottom:-48px!important}.v-application .my-sm-n13{margin-top:-52px!important;margin-bottom:-52px!important}.v-application .my-sm-n14{margin-top:-56px!important;margin-bottom:-56px!important}.v-application .my-sm-n15{margin-top:-60px!important;margin-bottom:-60px!important}.v-application .my-sm-n16{margin-top:-64px!important;margin-bottom:-64px!important}.v-application .mt-sm-n1{margin-top:-4px!important}.v-application .mt-sm-n2{margin-top:-8px!important}.v-application .mt-sm-n3{margin-top:-12px!important}.v-application .mt-sm-n4{margin-top:-16px!important}.v-application .mt-sm-n5{margin-top:-20px!important}.v-application .mt-sm-n6{margin-top:-24px!important}.v-application .mt-sm-n7{margin-top:-28px!important}.v-application .mt-sm-n8{margin-top:-32px!important}.v-application .mt-sm-n9{margin-top:-36px!important}.v-application .mt-sm-n10{margin-top:-40px!important}.v-application .mt-sm-n11{margin-top:-44px!important}.v-application .mt-sm-n12{margin-top:-48px!important}.v-application .mt-sm-n13{margin-top:-52px!important}.v-application .mt-sm-n14{margin-top:-56px!important}.v-application .mt-sm-n15{margin-top:-60px!important}.v-application .mt-sm-n16{margin-top:-64px!important}.v-application .mr-sm-n1{margin-right:-4px!important}.v-application .mr-sm-n2{margin-right:-8px!important}.v-application .mr-sm-n3{margin-right:-12px!important}.v-application .mr-sm-n4{margin-right:-16px!important}.v-application .mr-sm-n5{margin-right:-20px!important}.v-application .mr-sm-n6{margin-right:-24px!important}.v-application .mr-sm-n7{margin-right:-28px!important}.v-application .mr-sm-n8{margin-right:-32px!important}.v-application .mr-sm-n9{margin-right:-36px!important}.v-application .mr-sm-n10{margin-right:-40px!important}.v-application .mr-sm-n11{margin-right:-44px!important}.v-application .mr-sm-n12{margin-right:-48px!important}.v-application .mr-sm-n13{margin-right:-52px!important}.v-application .mr-sm-n14{margin-right:-56px!important}.v-application .mr-sm-n15{margin-right:-60px!important}.v-application .mr-sm-n16{margin-right:-64px!important}.v-application .mb-sm-n1{margin-bottom:-4px!important}.v-application .mb-sm-n2{margin-bottom:-8px!important}.v-application .mb-sm-n3{margin-bottom:-12px!important}.v-application .mb-sm-n4{margin-bottom:-16px!important}.v-application .mb-sm-n5{margin-bottom:-20px!important}.v-application .mb-sm-n6{margin-bottom:-24px!important}.v-application .mb-sm-n7{margin-bottom:-28px!important}.v-application .mb-sm-n8{margin-bottom:-32px!important}.v-application .mb-sm-n9{margin-bottom:-36px!important}.v-application .mb-sm-n10{margin-bottom:-40px!important}.v-application .mb-sm-n11{margin-bottom:-44px!important}.v-application .mb-sm-n12{margin-bottom:-48px!important}.v-application .mb-sm-n13{margin-bottom:-52px!important}.v-application .mb-sm-n14{margin-bottom:-56px!important}.v-application .mb-sm-n15{margin-bottom:-60px!important}.v-application .mb-sm-n16{margin-bottom:-64px!important}.v-application .ml-sm-n1{margin-left:-4px!important}.v-application .ml-sm-n2{margin-left:-8px!important}.v-application .ml-sm-n3{margin-left:-12px!important}.v-application .ml-sm-n4{margin-left:-16px!important}.v-application .ml-sm-n5{margin-left:-20px!important}.v-application .ml-sm-n6{margin-left:-24px!important}.v-application .ml-sm-n7{margin-left:-28px!important}.v-application .ml-sm-n8{margin-left:-32px!important}.v-application .ml-sm-n9{margin-left:-36px!important}.v-application .ml-sm-n10{margin-left:-40px!important}.v-application .ml-sm-n11{margin-left:-44px!important}.v-application .ml-sm-n12{margin-left:-48px!important}.v-application .ml-sm-n13{margin-left:-52px!important}.v-application .ml-sm-n14{margin-left:-56px!important}.v-application .ml-sm-n15{margin-left:-60px!important}.v-application .ml-sm-n16{margin-left:-64px!important}.v-application--is-ltr .ms-sm-n1{margin-left:-4px!important}.v-application--is-rtl .ms-sm-n1{margin-right:-4px!important}.v-application--is-ltr .ms-sm-n2{margin-left:-8px!important}.v-application--is-rtl .ms-sm-n2{margin-right:-8px!important}.v-application--is-ltr .ms-sm-n3{margin-left:-12px!important}.v-application--is-rtl .ms-sm-n3{margin-right:-12px!important}.v-application--is-ltr .ms-sm-n4{margin-left:-16px!important}.v-application--is-rtl .ms-sm-n4{margin-right:-16px!important}.v-application--is-ltr .ms-sm-n5{margin-left:-20px!important}.v-application--is-rtl .ms-sm-n5{margin-right:-20px!important}.v-application--is-ltr .ms-sm-n6{margin-left:-24px!important}.v-application--is-rtl .ms-sm-n6{margin-right:-24px!important}.v-application--is-ltr .ms-sm-n7{margin-left:-28px!important}.v-application--is-rtl .ms-sm-n7{margin-right:-28px!important}.v-application--is-ltr .ms-sm-n8{margin-left:-32px!important}.v-application--is-rtl .ms-sm-n8{margin-right:-32px!important}.v-application--is-ltr .ms-sm-n9{margin-left:-36px!important}.v-application--is-rtl .ms-sm-n9{margin-right:-36px!important}.v-application--is-ltr .ms-sm-n10{margin-left:-40px!important}.v-application--is-rtl .ms-sm-n10{margin-right:-40px!important}.v-application--is-ltr .ms-sm-n11{margin-left:-44px!important}.v-application--is-rtl .ms-sm-n11{margin-right:-44px!important}.v-application--is-ltr .ms-sm-n12{margin-left:-48px!important}.v-application--is-rtl .ms-sm-n12{margin-right:-48px!important}.v-application--is-ltr .ms-sm-n13{margin-left:-52px!important}.v-application--is-rtl .ms-sm-n13{margin-right:-52px!important}.v-application--is-ltr .ms-sm-n14{margin-left:-56px!important}.v-application--is-rtl .ms-sm-n14{margin-right:-56px!important}.v-application--is-ltr .ms-sm-n15{margin-left:-60px!important}.v-application--is-rtl .ms-sm-n15{margin-right:-60px!important}.v-application--is-ltr .ms-sm-n16{margin-left:-64px!important}.v-application--is-rtl .ms-sm-n16{margin-right:-64px!important}.v-application--is-ltr .me-sm-n1{margin-right:-4px!important}.v-application--is-rtl .me-sm-n1{margin-left:-4px!important}.v-application--is-ltr .me-sm-n2{margin-right:-8px!important}.v-application--is-rtl .me-sm-n2{margin-left:-8px!important}.v-application--is-ltr .me-sm-n3{margin-right:-12px!important}.v-application--is-rtl .me-sm-n3{margin-left:-12px!important}.v-application--is-ltr .me-sm-n4{margin-right:-16px!important}.v-application--is-rtl .me-sm-n4{margin-left:-16px!important}.v-application--is-ltr .me-sm-n5{margin-right:-20px!important}.v-application--is-rtl .me-sm-n5{margin-left:-20px!important}.v-application--is-ltr .me-sm-n6{margin-right:-24px!important}.v-application--is-rtl .me-sm-n6{margin-left:-24px!important}.v-application--is-ltr .me-sm-n7{margin-right:-28px!important}.v-application--is-rtl .me-sm-n7{margin-left:-28px!important}.v-application--is-ltr .me-sm-n8{margin-right:-32px!important}.v-application--is-rtl .me-sm-n8{margin-left:-32px!important}.v-application--is-ltr .me-sm-n9{margin-right:-36px!important}.v-application--is-rtl .me-sm-n9{margin-left:-36px!important}.v-application--is-ltr .me-sm-n10{margin-right:-40px!important}.v-application--is-rtl .me-sm-n10{margin-left:-40px!important}.v-application--is-ltr .me-sm-n11{margin-right:-44px!important}.v-application--is-rtl .me-sm-n11{margin-left:-44px!important}.v-application--is-ltr .me-sm-n12{margin-right:-48px!important}.v-application--is-rtl .me-sm-n12{margin-left:-48px!important}.v-application--is-ltr .me-sm-n13{margin-right:-52px!important}.v-application--is-rtl .me-sm-n13{margin-left:-52px!important}.v-application--is-ltr .me-sm-n14{margin-right:-56px!important}.v-application--is-rtl .me-sm-n14{margin-left:-56px!important}.v-application--is-ltr .me-sm-n15{margin-right:-60px!important}.v-application--is-rtl .me-sm-n15{margin-left:-60px!important}.v-application--is-ltr .me-sm-n16{margin-right:-64px!important}.v-application--is-rtl .me-sm-n16{margin-left:-64px!important}.v-application .pa-sm-0{padding:0!important}.v-application .pa-sm-1{padding:4px!important}.v-application .pa-sm-2{padding:8px!important}.v-application .pa-sm-3{padding:12px!important}.v-application .pa-sm-4{padding:16px!important}.v-application .pa-sm-5{padding:20px!important}.v-application .pa-sm-6{padding:24px!important}.v-application .pa-sm-7{padding:28px!important}.v-application .pa-sm-8{padding:32px!important}.v-application .pa-sm-9{padding:36px!important}.v-application .pa-sm-10{padding:40px!important}.v-application .pa-sm-11{padding:44px!important}.v-application .pa-sm-12{padding:48px!important}.v-application .pa-sm-13{padding:52px!important}.v-application .pa-sm-14{padding:56px!important}.v-application .pa-sm-15{padding:60px!important}.v-application .pa-sm-16{padding:64px!important}.v-application .px-sm-0{padding-right:0!important;padding-left:0!important}.v-application .px-sm-1{padding-right:4px!important;padding-left:4px!important}.v-application .px-sm-2{padding-right:8px!important;padding-left:8px!important}.v-application .px-sm-3{padding-right:12px!important;padding-left:12px!important}.v-application .px-sm-4{padding-right:16px!important;padding-left:16px!important}.v-application .px-sm-5{padding-right:20px!important;padding-left:20px!important}.v-application .px-sm-6{padding-right:24px!important;padding-left:24px!important}.v-application .px-sm-7{padding-right:28px!important;padding-left:28px!important}.v-application .px-sm-8{padding-right:32px!important;padding-left:32px!important}.v-application .px-sm-9{padding-right:36px!important;padding-left:36px!important}.v-application .px-sm-10{padding-right:40px!important;padding-left:40px!important}.v-application .px-sm-11{padding-right:44px!important;padding-left:44px!important}.v-application .px-sm-12{padding-right:48px!important;padding-left:48px!important}.v-application .px-sm-13{padding-right:52px!important;padding-left:52px!important}.v-application .px-sm-14{padding-right:56px!important;padding-left:56px!important}.v-application .px-sm-15{padding-right:60px!important;padding-left:60px!important}.v-application .px-sm-16{padding-right:64px!important;padding-left:64px!important}.v-application .py-sm-0{padding-top:0!important;padding-bottom:0!important}.v-application .py-sm-1{padding-top:4px!important;padding-bottom:4px!important}.v-application .py-sm-2{padding-top:8px!important;padding-bottom:8px!important}.v-application .py-sm-3{padding-top:12px!important;padding-bottom:12px!important}.v-application .py-sm-4{padding-top:16px!important;padding-bottom:16px!important}.v-application .py-sm-5{padding-top:20px!important;padding-bottom:20px!important}.v-application .py-sm-6{padding-top:24px!important;padding-bottom:24px!important}.v-application .py-sm-7{padding-top:28px!important;padding-bottom:28px!important}.v-application .py-sm-8{padding-top:32px!important;padding-bottom:32px!important}.v-application .py-sm-9{padding-top:36px!important;padding-bottom:36px!important}.v-application .py-sm-10{padding-top:40px!important;padding-bottom:40px!important}.v-application .py-sm-11{padding-top:44px!important;padding-bottom:44px!important}.v-application .py-sm-12{padding-top:48px!important;padding-bottom:48px!important}.v-application .py-sm-13{padding-top:52px!important;padding-bottom:52px!important}.v-application .py-sm-14{padding-top:56px!important;padding-bottom:56px!important}.v-application .py-sm-15{padding-top:60px!important;padding-bottom:60px!important}.v-application .py-sm-16{padding-top:64px!important;padding-bottom:64px!important}.v-application .pt-sm-0{padding-top:0!important}.v-application .pt-sm-1{padding-top:4px!important}.v-application .pt-sm-2{padding-top:8px!important}.v-application .pt-sm-3{padding-top:12px!important}.v-application .pt-sm-4{padding-top:16px!important}.v-application .pt-sm-5{padding-top:20px!important}.v-application .pt-sm-6{padding-top:24px!important}.v-application .pt-sm-7{padding-top:28px!important}.v-application .pt-sm-8{padding-top:32px!important}.v-application .pt-sm-9{padding-top:36px!important}.v-application .pt-sm-10{padding-top:40px!important}.v-application .pt-sm-11{padding-top:44px!important}.v-application .pt-sm-12{padding-top:48px!important}.v-application .pt-sm-13{padding-top:52px!important}.v-application .pt-sm-14{padding-top:56px!important}.v-application .pt-sm-15{padding-top:60px!important}.v-application .pt-sm-16{padding-top:64px!important}.v-application .pr-sm-0{padding-right:0!important}.v-application .pr-sm-1{padding-right:4px!important}.v-application .pr-sm-2{padding-right:8px!important}.v-application .pr-sm-3{padding-right:12px!important}.v-application .pr-sm-4{padding-right:16px!important}.v-application .pr-sm-5{padding-right:20px!important}.v-application .pr-sm-6{padding-right:24px!important}.v-application .pr-sm-7{padding-right:28px!important}.v-application .pr-sm-8{padding-right:32px!important}.v-application .pr-sm-9{padding-right:36px!important}.v-application .pr-sm-10{padding-right:40px!important}.v-application .pr-sm-11{padding-right:44px!important}.v-application .pr-sm-12{padding-right:48px!important}.v-application .pr-sm-13{padding-right:52px!important}.v-application .pr-sm-14{padding-right:56px!important}.v-application .pr-sm-15{padding-right:60px!important}.v-application .pr-sm-16{padding-right:64px!important}.v-application .pb-sm-0{padding-bottom:0!important}.v-application .pb-sm-1{padding-bottom:4px!important}.v-application .pb-sm-2{padding-bottom:8px!important}.v-application .pb-sm-3{padding-bottom:12px!important}.v-application .pb-sm-4{padding-bottom:16px!important}.v-application .pb-sm-5{padding-bottom:20px!important}.v-application .pb-sm-6{padding-bottom:24px!important}.v-application .pb-sm-7{padding-bottom:28px!important}.v-application .pb-sm-8{padding-bottom:32px!important}.v-application .pb-sm-9{padding-bottom:36px!important}.v-application .pb-sm-10{padding-bottom:40px!important}.v-application .pb-sm-11{padding-bottom:44px!important}.v-application .pb-sm-12{padding-bottom:48px!important}.v-application .pb-sm-13{padding-bottom:52px!important}.v-application .pb-sm-14{padding-bottom:56px!important}.v-application .pb-sm-15{padding-bottom:60px!important}.v-application .pb-sm-16{padding-bottom:64px!important}.v-application .pl-sm-0{padding-left:0!important}.v-application .pl-sm-1{padding-left:4px!important}.v-application .pl-sm-2{padding-left:8px!important}.v-application .pl-sm-3{padding-left:12px!important}.v-application .pl-sm-4{padding-left:16px!important}.v-application .pl-sm-5{padding-left:20px!important}.v-application .pl-sm-6{padding-left:24px!important}.v-application .pl-sm-7{padding-left:28px!important}.v-application .pl-sm-8{padding-left:32px!important}.v-application .pl-sm-9{padding-left:36px!important}.v-application .pl-sm-10{padding-left:40px!important}.v-application .pl-sm-11{padding-left:44px!important}.v-application .pl-sm-12{padding-left:48px!important}.v-application .pl-sm-13{padding-left:52px!important}.v-application .pl-sm-14{padding-left:56px!important}.v-application .pl-sm-15{padding-left:60px!important}.v-application .pl-sm-16{padding-left:64px!important}.v-application--is-ltr .ps-sm-0{padding-left:0!important}.v-application--is-rtl .ps-sm-0{padding-right:0!important}.v-application--is-ltr .ps-sm-1{padding-left:4px!important}.v-application--is-rtl .ps-sm-1{padding-right:4px!important}.v-application--is-ltr .ps-sm-2{padding-left:8px!important}.v-application--is-rtl .ps-sm-2{padding-right:8px!important}.v-application--is-ltr .ps-sm-3{padding-left:12px!important}.v-application--is-rtl .ps-sm-3{padding-right:12px!important}.v-application--is-ltr .ps-sm-4{padding-left:16px!important}.v-application--is-rtl .ps-sm-4{padding-right:16px!important}.v-application--is-ltr .ps-sm-5{padding-left:20px!important}.v-application--is-rtl .ps-sm-5{padding-right:20px!important}.v-application--is-ltr .ps-sm-6{padding-left:24px!important}.v-application--is-rtl .ps-sm-6{padding-right:24px!important}.v-application--is-ltr .ps-sm-7{padding-left:28px!important}.v-application--is-rtl .ps-sm-7{padding-right:28px!important}.v-application--is-ltr .ps-sm-8{padding-left:32px!important}.v-application--is-rtl .ps-sm-8{padding-right:32px!important}.v-application--is-ltr .ps-sm-9{padding-left:36px!important}.v-application--is-rtl .ps-sm-9{padding-right:36px!important}.v-application--is-ltr .ps-sm-10{padding-left:40px!important}.v-application--is-rtl .ps-sm-10{padding-right:40px!important}.v-application--is-ltr .ps-sm-11{padding-left:44px!important}.v-application--is-rtl .ps-sm-11{padding-right:44px!important}.v-application--is-ltr .ps-sm-12{padding-left:48px!important}.v-application--is-rtl .ps-sm-12{padding-right:48px!important}.v-application--is-ltr .ps-sm-13{padding-left:52px!important}.v-application--is-rtl .ps-sm-13{padding-right:52px!important}.v-application--is-ltr .ps-sm-14{padding-left:56px!important}.v-application--is-rtl .ps-sm-14{padding-right:56px!important}.v-application--is-ltr .ps-sm-15{padding-left:60px!important}.v-application--is-rtl .ps-sm-15{padding-right:60px!important}.v-application--is-ltr .ps-sm-16{padding-left:64px!important}.v-application--is-rtl .ps-sm-16{padding-right:64px!important}.v-application--is-ltr .pe-sm-0{padding-right:0!important}.v-application--is-rtl .pe-sm-0{padding-left:0!important}.v-application--is-ltr .pe-sm-1{padding-right:4px!important}.v-application--is-rtl .pe-sm-1{padding-left:4px!important}.v-application--is-ltr .pe-sm-2{padding-right:8px!important}.v-application--is-rtl .pe-sm-2{padding-left:8px!important}.v-application--is-ltr .pe-sm-3{padding-right:12px!important}.v-application--is-rtl .pe-sm-3{padding-left:12px!important}.v-application--is-ltr .pe-sm-4{padding-right:16px!important}.v-application--is-rtl .pe-sm-4{padding-left:16px!important}.v-application--is-ltr .pe-sm-5{padding-right:20px!important}.v-application--is-rtl .pe-sm-5{padding-left:20px!important}.v-application--is-ltr .pe-sm-6{padding-right:24px!important}.v-application--is-rtl .pe-sm-6{padding-left:24px!important}.v-application--is-ltr .pe-sm-7{padding-right:28px!important}.v-application--is-rtl .pe-sm-7{padding-left:28px!important}.v-application--is-ltr .pe-sm-8{padding-right:32px!important}.v-application--is-rtl .pe-sm-8{padding-left:32px!important}.v-application--is-ltr .pe-sm-9{padding-right:36px!important}.v-application--is-rtl .pe-sm-9{padding-left:36px!important}.v-application--is-ltr .pe-sm-10{padding-right:40px!important}.v-application--is-rtl .pe-sm-10{padding-left:40px!important}.v-application--is-ltr .pe-sm-11{padding-right:44px!important}.v-application--is-rtl .pe-sm-11{padding-left:44px!important}.v-application--is-ltr .pe-sm-12{padding-right:48px!important}.v-application--is-rtl .pe-sm-12{padding-left:48px!important}.v-application--is-ltr .pe-sm-13{padding-right:52px!important}.v-application--is-rtl .pe-sm-13{padding-left:52px!important}.v-application--is-ltr .pe-sm-14{padding-right:56px!important}.v-application--is-rtl .pe-sm-14{padding-left:56px!important}.v-application--is-ltr .pe-sm-15{padding-right:60px!important}.v-application--is-rtl .pe-sm-15{padding-left:60px!important}.v-application--is-ltr .pe-sm-16{padding-right:64px!important}.v-application--is-rtl .pe-sm-16{padding-left:64px!important}.v-application .text-sm-left{text-align:left!important}.v-application .text-sm-right{text-align:right!important}.v-application .text-sm-center{text-align:center!important}.v-application .text-sm-justify{text-align:justify!important}.v-application .text-sm-start{text-align:start!important}.v-application .text-sm-end{text-align:end!important}.v-application .text-sm-h1{font-size:6rem!important;line-height:6rem;letter-spacing:-.015625em!important}.v-application .text-sm-h1,.v-application .text-sm-h2{font-weight:300;font-family:Roboto,sans-serif!important}.v-application .text-sm-h2{font-size:3.75rem!important;line-height:3.75rem;letter-spacing:-.0083333333em!important}.v-application .text-sm-h3{font-size:3rem!important;line-height:3.125rem;letter-spacing:normal!important}.v-application .text-sm-h3,.v-application .text-sm-h4{font-weight:400;font-family:Roboto,sans-serif!important}.v-application .text-sm-h4{font-size:2.125rem!important;line-height:2.5rem;letter-spacing:.0073529412em!important}.v-application .text-sm-h5{font-size:1.5rem!important;font-weight:400;letter-spacing:normal!important}.v-application .text-sm-h5,.v-application .text-sm-h6{line-height:2rem;font-family:Roboto,sans-serif!important}.v-application .text-sm-h6{font-size:1.25rem!important;font-weight:500;letter-spacing:.0125em!important}.v-application .text-sm-subtitle-1{font-size:1rem!important;font-weight:400;line-height:1.75rem;letter-spacing:.009375em!important;font-family:Roboto,sans-serif!important}.v-application .text-sm-subtitle-2{font-size:.875rem!important;font-weight:500;line-height:1.375rem;letter-spacing:.0071428571em!important;font-family:Roboto,sans-serif!important}.v-application .text-sm-body-1{font-size:1rem!important;font-weight:400;line-height:1.5rem;letter-spacing:.03125em!important;font-family:Roboto,sans-serif!important}.v-application .text-sm-body-2{font-weight:400;line-height:1.25rem;letter-spacing:.0178571429em!important}.v-application .text-sm-body-2,.v-application .text-sm-button{font-size:.875rem!important;font-family:Roboto,sans-serif!important}.v-application .text-sm-button{font-weight:500;line-height:2.25rem;letter-spacing:.0892857143em!important;text-transform:uppercase!important}.v-application .text-sm-caption{font-weight:400;line-height:1.25rem;letter-spacing:.0333333333em!important}.v-application .text-sm-caption,.v-application .text-sm-overline{font-size:.75rem!important;font-family:Roboto,sans-serif!important}.v-application .text-sm-overline{font-weight:500;line-height:2rem;letter-spacing:.1666666667em!important;text-transform:uppercase!important}}@media(min-width:960px){.v-application .d-md-none{display:none!important}.v-application .d-md-inline{display:inline!important}.v-application .d-md-inline-block{display:inline-block!important}.v-application .d-md-block{display:block!important}.v-application .d-md-table{display:table!important}.v-application .d-md-table-row{display:table-row!important}.v-application .d-md-table-cell{display:table-cell!important}.v-application .d-md-flex{display:flex!important}.v-application .d-md-inline-flex{display:inline-flex!important}.v-application .float-md-none{float:none!important}.v-application .float-md-left{float:left!important}.v-application .float-md-right{float:right!important}.v-application--is-rtl .float-md-end{float:left!important}.v-application--is-ltr .float-md-end,.v-application--is-rtl .float-md-start{float:right!important}.v-application--is-ltr .float-md-start{float:left!important}.v-application .flex-md-fill{flex:1 1 auto!important}.v-application .flex-md-row{flex-direction:row!important}.v-application .flex-md-column{flex-direction:column!important}.v-application .flex-md-row-reverse{flex-direction:row-reverse!important}.v-application .flex-md-column-reverse{flex-direction:column-reverse!important}.v-application .flex-md-grow-0{flex-grow:0!important}.v-application .flex-md-grow-1{flex-grow:1!important}.v-application .flex-md-shrink-0{flex-shrink:0!important}.v-application .flex-md-shrink-1{flex-shrink:1!important}.v-application .flex-md-wrap{flex-wrap:wrap!important}.v-application .flex-md-nowrap{flex-wrap:nowrap!important}.v-application .flex-md-wrap-reverse{flex-wrap:wrap-reverse!important}.v-application .justify-md-start{justify-content:flex-start!important}.v-application .justify-md-end{justify-content:flex-end!important}.v-application .justify-md-center{justify-content:center!important}.v-application .justify-md-space-between{justify-content:space-between!important}.v-application .justify-md-space-around{justify-content:space-around!important}.v-application .align-md-start{align-items:flex-start!important}.v-application .align-md-end{align-items:flex-end!important}.v-application .align-md-center{align-items:center!important}.v-application .align-md-baseline{align-items:baseline!important}.v-application .align-md-stretch{align-items:stretch!important}.v-application .align-content-md-start{align-content:flex-start!important}.v-application .align-content-md-end{align-content:flex-end!important}.v-application .align-content-md-center{align-content:center!important}.v-application .align-content-md-space-between{align-content:space-between!important}.v-application .align-content-md-space-around{align-content:space-around!important}.v-application .align-content-md-stretch{align-content:stretch!important}.v-application .align-self-md-auto{align-self:auto!important}.v-application .align-self-md-start{align-self:flex-start!important}.v-application .align-self-md-end{align-self:flex-end!important}.v-application .align-self-md-center{align-self:center!important}.v-application .align-self-md-baseline{align-self:baseline!important}.v-application .align-self-md-stretch{align-self:stretch!important}.v-application .order-md-first{order:-1!important}.v-application .order-md-0{order:0!important}.v-application .order-md-1{order:1!important}.v-application .order-md-2{order:2!important}.v-application .order-md-3{order:3!important}.v-application .order-md-4{order:4!important}.v-application .order-md-5{order:5!important}.v-application .order-md-6{order:6!important}.v-application .order-md-7{order:7!important}.v-application .order-md-8{order:8!important}.v-application .order-md-9{order:9!important}.v-application .order-md-10{order:10!important}.v-application .order-md-11{order:11!important}.v-application .order-md-12{order:12!important}.v-application .order-md-last{order:13!important}.v-application .ma-md-0{margin:0!important}.v-application .ma-md-1{margin:4px!important}.v-application .ma-md-2{margin:8px!important}.v-application .ma-md-3{margin:12px!important}.v-application .ma-md-4{margin:16px!important}.v-application .ma-md-5{margin:20px!important}.v-application .ma-md-6{margin:24px!important}.v-application .ma-md-7{margin:28px!important}.v-application .ma-md-8{margin:32px!important}.v-application .ma-md-9{margin:36px!important}.v-application .ma-md-10{margin:40px!important}.v-application .ma-md-11{margin:44px!important}.v-application .ma-md-12{margin:48px!important}.v-application .ma-md-13{margin:52px!important}.v-application .ma-md-14{margin:56px!important}.v-application .ma-md-15{margin:60px!important}.v-application .ma-md-16{margin:64px!important}.v-application .ma-md-auto{margin:auto!important}.v-application .mx-md-0{margin-right:0!important;margin-left:0!important}.v-application .mx-md-1{margin-right:4px!important;margin-left:4px!important}.v-application .mx-md-2{margin-right:8px!important;margin-left:8px!important}.v-application .mx-md-3{margin-right:12px!important;margin-left:12px!important}.v-application .mx-md-4{margin-right:16px!important;margin-left:16px!important}.v-application .mx-md-5{margin-right:20px!important;margin-left:20px!important}.v-application .mx-md-6{margin-right:24px!important;margin-left:24px!important}.v-application .mx-md-7{margin-right:28px!important;margin-left:28px!important}.v-application .mx-md-8{margin-right:32px!important;margin-left:32px!important}.v-application .mx-md-9{margin-right:36px!important;margin-left:36px!important}.v-application .mx-md-10{margin-right:40px!important;margin-left:40px!important}.v-application .mx-md-11{margin-right:44px!important;margin-left:44px!important}.v-application .mx-md-12{margin-right:48px!important;margin-left:48px!important}.v-application .mx-md-13{margin-right:52px!important;margin-left:52px!important}.v-application .mx-md-14{margin-right:56px!important;margin-left:56px!important}.v-application .mx-md-15{margin-right:60px!important;margin-left:60px!important}.v-application .mx-md-16{margin-right:64px!important;margin-left:64px!important}.v-application .mx-md-auto{margin-right:auto!important;margin-left:auto!important}.v-application .my-md-0{margin-top:0!important;margin-bottom:0!important}.v-application .my-md-1{margin-top:4px!important;margin-bottom:4px!important}.v-application .my-md-2{margin-top:8px!important;margin-bottom:8px!important}.v-application .my-md-3{margin-top:12px!important;margin-bottom:12px!important}.v-application .my-md-4{margin-top:16px!important;margin-bottom:16px!important}.v-application .my-md-5{margin-top:20px!important;margin-bottom:20px!important}.v-application .my-md-6{margin-top:24px!important;margin-bottom:24px!important}.v-application .my-md-7{margin-top:28px!important;margin-bottom:28px!important}.v-application .my-md-8{margin-top:32px!important;margin-bottom:32px!important}.v-application .my-md-9{margin-top:36px!important;margin-bottom:36px!important}.v-application .my-md-10{margin-top:40px!important;margin-bottom:40px!important}.v-application .my-md-11{margin-top:44px!important;margin-bottom:44px!important}.v-application .my-md-12{margin-top:48px!important;margin-bottom:48px!important}.v-application .my-md-13{margin-top:52px!important;margin-bottom:52px!important}.v-application .my-md-14{margin-top:56px!important;margin-bottom:56px!important}.v-application .my-md-15{margin-top:60px!important;margin-bottom:60px!important}.v-application .my-md-16{margin-top:64px!important;margin-bottom:64px!important}.v-application .my-md-auto{margin-top:auto!important;margin-bottom:auto!important}.v-application .mt-md-0{margin-top:0!important}.v-application .mt-md-1{margin-top:4px!important}.v-application .mt-md-2{margin-top:8px!important}.v-application .mt-md-3{margin-top:12px!important}.v-application .mt-md-4{margin-top:16px!important}.v-application .mt-md-5{margin-top:20px!important}.v-application .mt-md-6{margin-top:24px!important}.v-application .mt-md-7{margin-top:28px!important}.v-application .mt-md-8{margin-top:32px!important}.v-application .mt-md-9{margin-top:36px!important}.v-application .mt-md-10{margin-top:40px!important}.v-application .mt-md-11{margin-top:44px!important}.v-application .mt-md-12{margin-top:48px!important}.v-application .mt-md-13{margin-top:52px!important}.v-application .mt-md-14{margin-top:56px!important}.v-application .mt-md-15{margin-top:60px!important}.v-application .mt-md-16{margin-top:64px!important}.v-application .mt-md-auto{margin-top:auto!important}.v-application .mr-md-0{margin-right:0!important}.v-application .mr-md-1{margin-right:4px!important}.v-application .mr-md-2{margin-right:8px!important}.v-application .mr-md-3{margin-right:12px!important}.v-application .mr-md-4{margin-right:16px!important}.v-application .mr-md-5{margin-right:20px!important}.v-application .mr-md-6{margin-right:24px!important}.v-application .mr-md-7{margin-right:28px!important}.v-application .mr-md-8{margin-right:32px!important}.v-application .mr-md-9{margin-right:36px!important}.v-application .mr-md-10{margin-right:40px!important}.v-application .mr-md-11{margin-right:44px!important}.v-application .mr-md-12{margin-right:48px!important}.v-application .mr-md-13{margin-right:52px!important}.v-application .mr-md-14{margin-right:56px!important}.v-application .mr-md-15{margin-right:60px!important}.v-application .mr-md-16{margin-right:64px!important}.v-application .mr-md-auto{margin-right:auto!important}.v-application .mb-md-0{margin-bottom:0!important}.v-application .mb-md-1{margin-bottom:4px!important}.v-application .mb-md-2{margin-bottom:8px!important}.v-application .mb-md-3{margin-bottom:12px!important}.v-application .mb-md-4{margin-bottom:16px!important}.v-application .mb-md-5{margin-bottom:20px!important}.v-application .mb-md-6{margin-bottom:24px!important}.v-application .mb-md-7{margin-bottom:28px!important}.v-application .mb-md-8{margin-bottom:32px!important}.v-application .mb-md-9{margin-bottom:36px!important}.v-application .mb-md-10{margin-bottom:40px!important}.v-application .mb-md-11{margin-bottom:44px!important}.v-application .mb-md-12{margin-bottom:48px!important}.v-application .mb-md-13{margin-bottom:52px!important}.v-application .mb-md-14{margin-bottom:56px!important}.v-application .mb-md-15{margin-bottom:60px!important}.v-application .mb-md-16{margin-bottom:64px!important}.v-application .mb-md-auto{margin-bottom:auto!important}.v-application .ml-md-0{margin-left:0!important}.v-application .ml-md-1{margin-left:4px!important}.v-application .ml-md-2{margin-left:8px!important}.v-application .ml-md-3{margin-left:12px!important}.v-application .ml-md-4{margin-left:16px!important}.v-application .ml-md-5{margin-left:20px!important}.v-application .ml-md-6{margin-left:24px!important}.v-application .ml-md-7{margin-left:28px!important}.v-application .ml-md-8{margin-left:32px!important}.v-application .ml-md-9{margin-left:36px!important}.v-application .ml-md-10{margin-left:40px!important}.v-application .ml-md-11{margin-left:44px!important}.v-application .ml-md-12{margin-left:48px!important}.v-application .ml-md-13{margin-left:52px!important}.v-application .ml-md-14{margin-left:56px!important}.v-application .ml-md-15{margin-left:60px!important}.v-application .ml-md-16{margin-left:64px!important}.v-application .ml-md-auto{margin-left:auto!important}.v-application--is-ltr .ms-md-0{margin-left:0!important}.v-application--is-rtl .ms-md-0{margin-right:0!important}.v-application--is-ltr .ms-md-1{margin-left:4px!important}.v-application--is-rtl .ms-md-1{margin-right:4px!important}.v-application--is-ltr .ms-md-2{margin-left:8px!important}.v-application--is-rtl .ms-md-2{margin-right:8px!important}.v-application--is-ltr .ms-md-3{margin-left:12px!important}.v-application--is-rtl .ms-md-3{margin-right:12px!important}.v-application--is-ltr .ms-md-4{margin-left:16px!important}.v-application--is-rtl .ms-md-4{margin-right:16px!important}.v-application--is-ltr .ms-md-5{margin-left:20px!important}.v-application--is-rtl .ms-md-5{margin-right:20px!important}.v-application--is-ltr .ms-md-6{margin-left:24px!important}.v-application--is-rtl .ms-md-6{margin-right:24px!important}.v-application--is-ltr .ms-md-7{margin-left:28px!important}.v-application--is-rtl .ms-md-7{margin-right:28px!important}.v-application--is-ltr .ms-md-8{margin-left:32px!important}.v-application--is-rtl .ms-md-8{margin-right:32px!important}.v-application--is-ltr .ms-md-9{margin-left:36px!important}.v-application--is-rtl .ms-md-9{margin-right:36px!important}.v-application--is-ltr .ms-md-10{margin-left:40px!important}.v-application--is-rtl .ms-md-10{margin-right:40px!important}.v-application--is-ltr .ms-md-11{margin-left:44px!important}.v-application--is-rtl .ms-md-11{margin-right:44px!important}.v-application--is-ltr .ms-md-12{margin-left:48px!important}.v-application--is-rtl .ms-md-12{margin-right:48px!important}.v-application--is-ltr .ms-md-13{margin-left:52px!important}.v-application--is-rtl .ms-md-13{margin-right:52px!important}.v-application--is-ltr .ms-md-14{margin-left:56px!important}.v-application--is-rtl .ms-md-14{margin-right:56px!important}.v-application--is-ltr .ms-md-15{margin-left:60px!important}.v-application--is-rtl .ms-md-15{margin-right:60px!important}.v-application--is-ltr .ms-md-16{margin-left:64px!important}.v-application--is-rtl .ms-md-16{margin-right:64px!important}.v-application--is-ltr .ms-md-auto{margin-left:auto!important}.v-application--is-rtl .ms-md-auto{margin-right:auto!important}.v-application--is-ltr .me-md-0{margin-right:0!important}.v-application--is-rtl .me-md-0{margin-left:0!important}.v-application--is-ltr .me-md-1{margin-right:4px!important}.v-application--is-rtl .me-md-1{margin-left:4px!important}.v-application--is-ltr .me-md-2{margin-right:8px!important}.v-application--is-rtl .me-md-2{margin-left:8px!important}.v-application--is-ltr .me-md-3{margin-right:12px!important}.v-application--is-rtl .me-md-3{margin-left:12px!important}.v-application--is-ltr .me-md-4{margin-right:16px!important}.v-application--is-rtl .me-md-4{margin-left:16px!important}.v-application--is-ltr .me-md-5{margin-right:20px!important}.v-application--is-rtl .me-md-5{margin-left:20px!important}.v-application--is-ltr .me-md-6{margin-right:24px!important}.v-application--is-rtl .me-md-6{margin-left:24px!important}.v-application--is-ltr .me-md-7{margin-right:28px!important}.v-application--is-rtl .me-md-7{margin-left:28px!important}.v-application--is-ltr .me-md-8{margin-right:32px!important}.v-application--is-rtl .me-md-8{margin-left:32px!important}.v-application--is-ltr .me-md-9{margin-right:36px!important}.v-application--is-rtl .me-md-9{margin-left:36px!important}.v-application--is-ltr .me-md-10{margin-right:40px!important}.v-application--is-rtl .me-md-10{margin-left:40px!important}.v-application--is-ltr .me-md-11{margin-right:44px!important}.v-application--is-rtl .me-md-11{margin-left:44px!important}.v-application--is-ltr .me-md-12{margin-right:48px!important}.v-application--is-rtl .me-md-12{margin-left:48px!important}.v-application--is-ltr .me-md-13{margin-right:52px!important}.v-application--is-rtl .me-md-13{margin-left:52px!important}.v-application--is-ltr .me-md-14{margin-right:56px!important}.v-application--is-rtl .me-md-14{margin-left:56px!important}.v-application--is-ltr .me-md-15{margin-right:60px!important}.v-application--is-rtl .me-md-15{margin-left:60px!important}.v-application--is-ltr .me-md-16{margin-right:64px!important}.v-application--is-rtl .me-md-16{margin-left:64px!important}.v-application--is-ltr .me-md-auto{margin-right:auto!important}.v-application--is-rtl .me-md-auto{margin-left:auto!important}.v-application .ma-md-n1{margin:-4px!important}.v-application .ma-md-n2{margin:-8px!important}.v-application .ma-md-n3{margin:-12px!important}.v-application .ma-md-n4{margin:-16px!important}.v-application .ma-md-n5{margin:-20px!important}.v-application .ma-md-n6{margin:-24px!important}.v-application .ma-md-n7{margin:-28px!important}.v-application .ma-md-n8{margin:-32px!important}.v-application .ma-md-n9{margin:-36px!important}.v-application .ma-md-n10{margin:-40px!important}.v-application .ma-md-n11{margin:-44px!important}.v-application .ma-md-n12{margin:-48px!important}.v-application .ma-md-n13{margin:-52px!important}.v-application .ma-md-n14{margin:-56px!important}.v-application .ma-md-n15{margin:-60px!important}.v-application .ma-md-n16{margin:-64px!important}.v-application .mx-md-n1{margin-right:-4px!important;margin-left:-4px!important}.v-application .mx-md-n2{margin-right:-8px!important;margin-left:-8px!important}.v-application .mx-md-n3{margin-right:-12px!important;margin-left:-12px!important}.v-application .mx-md-n4{margin-right:-16px!important;margin-left:-16px!important}.v-application .mx-md-n5{margin-right:-20px!important;margin-left:-20px!important}.v-application .mx-md-n6{margin-right:-24px!important;margin-left:-24px!important}.v-application .mx-md-n7{margin-right:-28px!important;margin-left:-28px!important}.v-application .mx-md-n8{margin-right:-32px!important;margin-left:-32px!important}.v-application .mx-md-n9{margin-right:-36px!important;margin-left:-36px!important}.v-application .mx-md-n10{margin-right:-40px!important;margin-left:-40px!important}.v-application .mx-md-n11{margin-right:-44px!important;margin-left:-44px!important}.v-application .mx-md-n12{margin-right:-48px!important;margin-left:-48px!important}.v-application .mx-md-n13{margin-right:-52px!important;margin-left:-52px!important}.v-application .mx-md-n14{margin-right:-56px!important;margin-left:-56px!important}.v-application .mx-md-n15{margin-right:-60px!important;margin-left:-60px!important}.v-application .mx-md-n16{margin-right:-64px!important;margin-left:-64px!important}.v-application .my-md-n1{margin-top:-4px!important;margin-bottom:-4px!important}.v-application .my-md-n2{margin-top:-8px!important;margin-bottom:-8px!important}.v-application .my-md-n3{margin-top:-12px!important;margin-bottom:-12px!important}.v-application .my-md-n4{margin-top:-16px!important;margin-bottom:-16px!important}.v-application .my-md-n5{margin-top:-20px!important;margin-bottom:-20px!important}.v-application .my-md-n6{margin-top:-24px!important;margin-bottom:-24px!important}.v-application .my-md-n7{margin-top:-28px!important;margin-bottom:-28px!important}.v-application .my-md-n8{margin-top:-32px!important;margin-bottom:-32px!important}.v-application .my-md-n9{margin-top:-36px!important;margin-bottom:-36px!important}.v-application .my-md-n10{margin-top:-40px!important;margin-bottom:-40px!important}.v-application .my-md-n11{margin-top:-44px!important;margin-bottom:-44px!important}.v-application .my-md-n12{margin-top:-48px!important;margin-bottom:-48px!important}.v-application .my-md-n13{margin-top:-52px!important;margin-bottom:-52px!important}.v-application .my-md-n14{margin-top:-56px!important;margin-bottom:-56px!important}.v-application .my-md-n15{margin-top:-60px!important;margin-bottom:-60px!important}.v-application .my-md-n16{margin-top:-64px!important;margin-bottom:-64px!important}.v-application .mt-md-n1{margin-top:-4px!important}.v-application .mt-md-n2{margin-top:-8px!important}.v-application .mt-md-n3{margin-top:-12px!important}.v-application .mt-md-n4{margin-top:-16px!important}.v-application .mt-md-n5{margin-top:-20px!important}.v-application .mt-md-n6{margin-top:-24px!important}.v-application .mt-md-n7{margin-top:-28px!important}.v-application .mt-md-n8{margin-top:-32px!important}.v-application .mt-md-n9{margin-top:-36px!important}.v-application .mt-md-n10{margin-top:-40px!important}.v-application .mt-md-n11{margin-top:-44px!important}.v-application .mt-md-n12{margin-top:-48px!important}.v-application .mt-md-n13{margin-top:-52px!important}.v-application .mt-md-n14{margin-top:-56px!important}.v-application .mt-md-n15{margin-top:-60px!important}.v-application .mt-md-n16{margin-top:-64px!important}.v-application .mr-md-n1{margin-right:-4px!important}.v-application .mr-md-n2{margin-right:-8px!important}.v-application .mr-md-n3{margin-right:-12px!important}.v-application .mr-md-n4{margin-right:-16px!important}.v-application .mr-md-n5{margin-right:-20px!important}.v-application .mr-md-n6{margin-right:-24px!important}.v-application .mr-md-n7{margin-right:-28px!important}.v-application .mr-md-n8{margin-right:-32px!important}.v-application .mr-md-n9{margin-right:-36px!important}.v-application .mr-md-n10{margin-right:-40px!important}.v-application .mr-md-n11{margin-right:-44px!important}.v-application .mr-md-n12{margin-right:-48px!important}.v-application .mr-md-n13{margin-right:-52px!important}.v-application .mr-md-n14{margin-right:-56px!important}.v-application .mr-md-n15{margin-right:-60px!important}.v-application .mr-md-n16{margin-right:-64px!important}.v-application .mb-md-n1{margin-bottom:-4px!important}.v-application .mb-md-n2{margin-bottom:-8px!important}.v-application .mb-md-n3{margin-bottom:-12px!important}.v-application .mb-md-n4{margin-bottom:-16px!important}.v-application .mb-md-n5{margin-bottom:-20px!important}.v-application .mb-md-n6{margin-bottom:-24px!important}.v-application .mb-md-n7{margin-bottom:-28px!important}.v-application .mb-md-n8{margin-bottom:-32px!important}.v-application .mb-md-n9{margin-bottom:-36px!important}.v-application .mb-md-n10{margin-bottom:-40px!important}.v-application .mb-md-n11{margin-bottom:-44px!important}.v-application .mb-md-n12{margin-bottom:-48px!important}.v-application .mb-md-n13{margin-bottom:-52px!important}.v-application .mb-md-n14{margin-bottom:-56px!important}.v-application .mb-md-n15{margin-bottom:-60px!important}.v-application .mb-md-n16{margin-bottom:-64px!important}.v-application .ml-md-n1{margin-left:-4px!important}.v-application .ml-md-n2{margin-left:-8px!important}.v-application .ml-md-n3{margin-left:-12px!important}.v-application .ml-md-n4{margin-left:-16px!important}.v-application .ml-md-n5{margin-left:-20px!important}.v-application .ml-md-n6{margin-left:-24px!important}.v-application .ml-md-n7{margin-left:-28px!important}.v-application .ml-md-n8{margin-left:-32px!important}.v-application .ml-md-n9{margin-left:-36px!important}.v-application .ml-md-n10{margin-left:-40px!important}.v-application .ml-md-n11{margin-left:-44px!important}.v-application .ml-md-n12{margin-left:-48px!important}.v-application .ml-md-n13{margin-left:-52px!important}.v-application .ml-md-n14{margin-left:-56px!important}.v-application .ml-md-n15{margin-left:-60px!important}.v-application .ml-md-n16{margin-left:-64px!important}.v-application--is-ltr .ms-md-n1{margin-left:-4px!important}.v-application--is-rtl .ms-md-n1{margin-right:-4px!important}.v-application--is-ltr .ms-md-n2{margin-left:-8px!important}.v-application--is-rtl .ms-md-n2{margin-right:-8px!important}.v-application--is-ltr .ms-md-n3{margin-left:-12px!important}.v-application--is-rtl .ms-md-n3{margin-right:-12px!important}.v-application--is-ltr .ms-md-n4{margin-left:-16px!important}.v-application--is-rtl .ms-md-n4{margin-right:-16px!important}.v-application--is-ltr .ms-md-n5{margin-left:-20px!important}.v-application--is-rtl .ms-md-n5{margin-right:-20px!important}.v-application--is-ltr .ms-md-n6{margin-left:-24px!important}.v-application--is-rtl .ms-md-n6{margin-right:-24px!important}.v-application--is-ltr .ms-md-n7{margin-left:-28px!important}.v-application--is-rtl .ms-md-n7{margin-right:-28px!important}.v-application--is-ltr .ms-md-n8{margin-left:-32px!important}.v-application--is-rtl .ms-md-n8{margin-right:-32px!important}.v-application--is-ltr .ms-md-n9{margin-left:-36px!important}.v-application--is-rtl .ms-md-n9{margin-right:-36px!important}.v-application--is-ltr .ms-md-n10{margin-left:-40px!important}.v-application--is-rtl .ms-md-n10{margin-right:-40px!important}.v-application--is-ltr .ms-md-n11{margin-left:-44px!important}.v-application--is-rtl .ms-md-n11{margin-right:-44px!important}.v-application--is-ltr .ms-md-n12{margin-left:-48px!important}.v-application--is-rtl .ms-md-n12{margin-right:-48px!important}.v-application--is-ltr .ms-md-n13{margin-left:-52px!important}.v-application--is-rtl .ms-md-n13{margin-right:-52px!important}.v-application--is-ltr .ms-md-n14{margin-left:-56px!important}.v-application--is-rtl .ms-md-n14{margin-right:-56px!important}.v-application--is-ltr .ms-md-n15{margin-left:-60px!important}.v-application--is-rtl .ms-md-n15{margin-right:-60px!important}.v-application--is-ltr .ms-md-n16{margin-left:-64px!important}.v-application--is-rtl .ms-md-n16{margin-right:-64px!important}.v-application--is-ltr .me-md-n1{margin-right:-4px!important}.v-application--is-rtl .me-md-n1{margin-left:-4px!important}.v-application--is-ltr .me-md-n2{margin-right:-8px!important}.v-application--is-rtl .me-md-n2{margin-left:-8px!important}.v-application--is-ltr .me-md-n3{margin-right:-12px!important}.v-application--is-rtl .me-md-n3{margin-left:-12px!important}.v-application--is-ltr .me-md-n4{margin-right:-16px!important}.v-application--is-rtl .me-md-n4{margin-left:-16px!important}.v-application--is-ltr .me-md-n5{margin-right:-20px!important}.v-application--is-rtl .me-md-n5{margin-left:-20px!important}.v-application--is-ltr .me-md-n6{margin-right:-24px!important}.v-application--is-rtl .me-md-n6{margin-left:-24px!important}.v-application--is-ltr .me-md-n7{margin-right:-28px!important}.v-application--is-rtl .me-md-n7{margin-left:-28px!important}.v-application--is-ltr .me-md-n8{margin-right:-32px!important}.v-application--is-rtl .me-md-n8{margin-left:-32px!important}.v-application--is-ltr .me-md-n9{margin-right:-36px!important}.v-application--is-rtl .me-md-n9{margin-left:-36px!important}.v-application--is-ltr .me-md-n10{margin-right:-40px!important}.v-application--is-rtl .me-md-n10{margin-left:-40px!important}.v-application--is-ltr .me-md-n11{margin-right:-44px!important}.v-application--is-rtl .me-md-n11{margin-left:-44px!important}.v-application--is-ltr .me-md-n12{margin-right:-48px!important}.v-application--is-rtl .me-md-n12{margin-left:-48px!important}.v-application--is-ltr .me-md-n13{margin-right:-52px!important}.v-application--is-rtl .me-md-n13{margin-left:-52px!important}.v-application--is-ltr .me-md-n14{margin-right:-56px!important}.v-application--is-rtl .me-md-n14{margin-left:-56px!important}.v-application--is-ltr .me-md-n15{margin-right:-60px!important}.v-application--is-rtl .me-md-n15{margin-left:-60px!important}.v-application--is-ltr .me-md-n16{margin-right:-64px!important}.v-application--is-rtl .me-md-n16{margin-left:-64px!important}.v-application .pa-md-0{padding:0!important}.v-application .pa-md-1{padding:4px!important}.v-application .pa-md-2{padding:8px!important}.v-application .pa-md-3{padding:12px!important}.v-application .pa-md-4{padding:16px!important}.v-application .pa-md-5{padding:20px!important}.v-application .pa-md-6{padding:24px!important}.v-application .pa-md-7{padding:28px!important}.v-application .pa-md-8{padding:32px!important}.v-application .pa-md-9{padding:36px!important}.v-application .pa-md-10{padding:40px!important}.v-application .pa-md-11{padding:44px!important}.v-application .pa-md-12{padding:48px!important}.v-application .pa-md-13{padding:52px!important}.v-application .pa-md-14{padding:56px!important}.v-application .pa-md-15{padding:60px!important}.v-application .pa-md-16{padding:64px!important}.v-application .px-md-0{padding-right:0!important;padding-left:0!important}.v-application .px-md-1{padding-right:4px!important;padding-left:4px!important}.v-application .px-md-2{padding-right:8px!important;padding-left:8px!important}.v-application .px-md-3{padding-right:12px!important;padding-left:12px!important}.v-application .px-md-4{padding-right:16px!important;padding-left:16px!important}.v-application .px-md-5{padding-right:20px!important;padding-left:20px!important}.v-application .px-md-6{padding-right:24px!important;padding-left:24px!important}.v-application .px-md-7{padding-right:28px!important;padding-left:28px!important}.v-application .px-md-8{padding-right:32px!important;padding-left:32px!important}.v-application .px-md-9{padding-right:36px!important;padding-left:36px!important}.v-application .px-md-10{padding-right:40px!important;padding-left:40px!important}.v-application .px-md-11{padding-right:44px!important;padding-left:44px!important}.v-application .px-md-12{padding-right:48px!important;padding-left:48px!important}.v-application .px-md-13{padding-right:52px!important;padding-left:52px!important}.v-application .px-md-14{padding-right:56px!important;padding-left:56px!important}.v-application .px-md-15{padding-right:60px!important;padding-left:60px!important}.v-application .px-md-16{padding-right:64px!important;padding-left:64px!important}.v-application .py-md-0{padding-top:0!important;padding-bottom:0!important}.v-application .py-md-1{padding-top:4px!important;padding-bottom:4px!important}.v-application .py-md-2{padding-top:8px!important;padding-bottom:8px!important}.v-application .py-md-3{padding-top:12px!important;padding-bottom:12px!important}.v-application .py-md-4{padding-top:16px!important;padding-bottom:16px!important}.v-application .py-md-5{padding-top:20px!important;padding-bottom:20px!important}.v-application .py-md-6{padding-top:24px!important;padding-bottom:24px!important}.v-application .py-md-7{padding-top:28px!important;padding-bottom:28px!important}.v-application .py-md-8{padding-top:32px!important;padding-bottom:32px!important}.v-application .py-md-9{padding-top:36px!important;padding-bottom:36px!important}.v-application .py-md-10{padding-top:40px!important;padding-bottom:40px!important}.v-application .py-md-11{padding-top:44px!important;padding-bottom:44px!important}.v-application .py-md-12{padding-top:48px!important;padding-bottom:48px!important}.v-application .py-md-13{padding-top:52px!important;padding-bottom:52px!important}.v-application .py-md-14{padding-top:56px!important;padding-bottom:56px!important}.v-application .py-md-15{padding-top:60px!important;padding-bottom:60px!important}.v-application .py-md-16{padding-top:64px!important;padding-bottom:64px!important}.v-application .pt-md-0{padding-top:0!important}.v-application .pt-md-1{padding-top:4px!important}.v-application .pt-md-2{padding-top:8px!important}.v-application .pt-md-3{padding-top:12px!important}.v-application .pt-md-4{padding-top:16px!important}.v-application .pt-md-5{padding-top:20px!important}.v-application .pt-md-6{padding-top:24px!important}.v-application .pt-md-7{padding-top:28px!important}.v-application .pt-md-8{padding-top:32px!important}.v-application .pt-md-9{padding-top:36px!important}.v-application .pt-md-10{padding-top:40px!important}.v-application .pt-md-11{padding-top:44px!important}.v-application .pt-md-12{padding-top:48px!important}.v-application .pt-md-13{padding-top:52px!important}.v-application .pt-md-14{padding-top:56px!important}.v-application .pt-md-15{padding-top:60px!important}.v-application .pt-md-16{padding-top:64px!important}.v-application .pr-md-0{padding-right:0!important}.v-application .pr-md-1{padding-right:4px!important}.v-application .pr-md-2{padding-right:8px!important}.v-application .pr-md-3{padding-right:12px!important}.v-application .pr-md-4{padding-right:16px!important}.v-application .pr-md-5{padding-right:20px!important}.v-application .pr-md-6{padding-right:24px!important}.v-application .pr-md-7{padding-right:28px!important}.v-application .pr-md-8{padding-right:32px!important}.v-application .pr-md-9{padding-right:36px!important}.v-application .pr-md-10{padding-right:40px!important}.v-application .pr-md-11{padding-right:44px!important}.v-application .pr-md-12{padding-right:48px!important}.v-application .pr-md-13{padding-right:52px!important}.v-application .pr-md-14{padding-right:56px!important}.v-application .pr-md-15{padding-right:60px!important}.v-application .pr-md-16{padding-right:64px!important}.v-application .pb-md-0{padding-bottom:0!important}.v-application .pb-md-1{padding-bottom:4px!important}.v-application .pb-md-2{padding-bottom:8px!important}.v-application .pb-md-3{padding-bottom:12px!important}.v-application .pb-md-4{padding-bottom:16px!important}.v-application .pb-md-5{padding-bottom:20px!important}.v-application .pb-md-6{padding-bottom:24px!important}.v-application .pb-md-7{padding-bottom:28px!important}.v-application .pb-md-8{padding-bottom:32px!important}.v-application .pb-md-9{padding-bottom:36px!important}.v-application .pb-md-10{padding-bottom:40px!important}.v-application .pb-md-11{padding-bottom:44px!important}.v-application .pb-md-12{padding-bottom:48px!important}.v-application .pb-md-13{padding-bottom:52px!important}.v-application .pb-md-14{padding-bottom:56px!important}.v-application .pb-md-15{padding-bottom:60px!important}.v-application .pb-md-16{padding-bottom:64px!important}.v-application .pl-md-0{padding-left:0!important}.v-application .pl-md-1{padding-left:4px!important}.v-application .pl-md-2{padding-left:8px!important}.v-application .pl-md-3{padding-left:12px!important}.v-application .pl-md-4{padding-left:16px!important}.v-application .pl-md-5{padding-left:20px!important}.v-application .pl-md-6{padding-left:24px!important}.v-application .pl-md-7{padding-left:28px!important}.v-application .pl-md-8{padding-left:32px!important}.v-application .pl-md-9{padding-left:36px!important}.v-application .pl-md-10{padding-left:40px!important}.v-application .pl-md-11{padding-left:44px!important}.v-application .pl-md-12{padding-left:48px!important}.v-application .pl-md-13{padding-left:52px!important}.v-application .pl-md-14{padding-left:56px!important}.v-application .pl-md-15{padding-left:60px!important}.v-application .pl-md-16{padding-left:64px!important}.v-application--is-ltr .ps-md-0{padding-left:0!important}.v-application--is-rtl .ps-md-0{padding-right:0!important}.v-application--is-ltr .ps-md-1{padding-left:4px!important}.v-application--is-rtl .ps-md-1{padding-right:4px!important}.v-application--is-ltr .ps-md-2{padding-left:8px!important}.v-application--is-rtl .ps-md-2{padding-right:8px!important}.v-application--is-ltr .ps-md-3{padding-left:12px!important}.v-application--is-rtl .ps-md-3{padding-right:12px!important}.v-application--is-ltr .ps-md-4{padding-left:16px!important}.v-application--is-rtl .ps-md-4{padding-right:16px!important}.v-application--is-ltr .ps-md-5{padding-left:20px!important}.v-application--is-rtl .ps-md-5{padding-right:20px!important}.v-application--is-ltr .ps-md-6{padding-left:24px!important}.v-application--is-rtl .ps-md-6{padding-right:24px!important}.v-application--is-ltr .ps-md-7{padding-left:28px!important}.v-application--is-rtl .ps-md-7{padding-right:28px!important}.v-application--is-ltr .ps-md-8{padding-left:32px!important}.v-application--is-rtl .ps-md-8{padding-right:32px!important}.v-application--is-ltr .ps-md-9{padding-left:36px!important}.v-application--is-rtl .ps-md-9{padding-right:36px!important}.v-application--is-ltr .ps-md-10{padding-left:40px!important}.v-application--is-rtl .ps-md-10{padding-right:40px!important}.v-application--is-ltr .ps-md-11{padding-left:44px!important}.v-application--is-rtl .ps-md-11{padding-right:44px!important}.v-application--is-ltr .ps-md-12{padding-left:48px!important}.v-application--is-rtl .ps-md-12{padding-right:48px!important}.v-application--is-ltr .ps-md-13{padding-left:52px!important}.v-application--is-rtl .ps-md-13{padding-right:52px!important}.v-application--is-ltr .ps-md-14{padding-left:56px!important}.v-application--is-rtl .ps-md-14{padding-right:56px!important}.v-application--is-ltr .ps-md-15{padding-left:60px!important}.v-application--is-rtl .ps-md-15{padding-right:60px!important}.v-application--is-ltr .ps-md-16{padding-left:64px!important}.v-application--is-rtl .ps-md-16{padding-right:64px!important}.v-application--is-ltr .pe-md-0{padding-right:0!important}.v-application--is-rtl .pe-md-0{padding-left:0!important}.v-application--is-ltr .pe-md-1{padding-right:4px!important}.v-application--is-rtl .pe-md-1{padding-left:4px!important}.v-application--is-ltr .pe-md-2{padding-right:8px!important}.v-application--is-rtl .pe-md-2{padding-left:8px!important}.v-application--is-ltr .pe-md-3{padding-right:12px!important}.v-application--is-rtl .pe-md-3{padding-left:12px!important}.v-application--is-ltr .pe-md-4{padding-right:16px!important}.v-application--is-rtl .pe-md-4{padding-left:16px!important}.v-application--is-ltr .pe-md-5{padding-right:20px!important}.v-application--is-rtl .pe-md-5{padding-left:20px!important}.v-application--is-ltr .pe-md-6{padding-right:24px!important}.v-application--is-rtl .pe-md-6{padding-left:24px!important}.v-application--is-ltr .pe-md-7{padding-right:28px!important}.v-application--is-rtl .pe-md-7{padding-left:28px!important}.v-application--is-ltr .pe-md-8{padding-right:32px!important}.v-application--is-rtl .pe-md-8{padding-left:32px!important}.v-application--is-ltr .pe-md-9{padding-right:36px!important}.v-application--is-rtl .pe-md-9{padding-left:36px!important}.v-application--is-ltr .pe-md-10{padding-right:40px!important}.v-application--is-rtl .pe-md-10{padding-left:40px!important}.v-application--is-ltr .pe-md-11{padding-right:44px!important}.v-application--is-rtl .pe-md-11{padding-left:44px!important}.v-application--is-ltr .pe-md-12{padding-right:48px!important}.v-application--is-rtl .pe-md-12{padding-left:48px!important}.v-application--is-ltr .pe-md-13{padding-right:52px!important}.v-application--is-rtl .pe-md-13{padding-left:52px!important}.v-application--is-ltr .pe-md-14{padding-right:56px!important}.v-application--is-rtl .pe-md-14{padding-left:56px!important}.v-application--is-ltr .pe-md-15{padding-right:60px!important}.v-application--is-rtl .pe-md-15{padding-left:60px!important}.v-application--is-ltr .pe-md-16{padding-right:64px!important}.v-application--is-rtl .pe-md-16{padding-left:64px!important}.v-application .text-md-left{text-align:left!important}.v-application .text-md-right{text-align:right!important}.v-application .text-md-center{text-align:center!important}.v-application .text-md-justify{text-align:justify!important}.v-application .text-md-start{text-align:start!important}.v-application .text-md-end{text-align:end!important}.v-application .text-md-h1{font-size:6rem!important;line-height:6rem;letter-spacing:-.015625em!important}.v-application .text-md-h1,.v-application .text-md-h2{font-weight:300;font-family:Roboto,sans-serif!important}.v-application .text-md-h2{font-size:3.75rem!important;line-height:3.75rem;letter-spacing:-.0083333333em!important}.v-application .text-md-h3{font-size:3rem!important;line-height:3.125rem;letter-spacing:normal!important}.v-application .text-md-h3,.v-application .text-md-h4{font-weight:400;font-family:Roboto,sans-serif!important}.v-application .text-md-h4{font-size:2.125rem!important;line-height:2.5rem;letter-spacing:.0073529412em!important}.v-application .text-md-h5{font-size:1.5rem!important;font-weight:400;letter-spacing:normal!important}.v-application .text-md-h5,.v-application .text-md-h6{line-height:2rem;font-family:Roboto,sans-serif!important}.v-application .text-md-h6{font-size:1.25rem!important;font-weight:500;letter-spacing:.0125em!important}.v-application .text-md-subtitle-1{font-size:1rem!important;font-weight:400;line-height:1.75rem;letter-spacing:.009375em!important;font-family:Roboto,sans-serif!important}.v-application .text-md-subtitle-2{font-size:.875rem!important;font-weight:500;line-height:1.375rem;letter-spacing:.0071428571em!important;font-family:Roboto,sans-serif!important}.v-application .text-md-body-1{font-size:1rem!important;font-weight:400;line-height:1.5rem;letter-spacing:.03125em!important;font-family:Roboto,sans-serif!important}.v-application .text-md-body-2{font-weight:400;line-height:1.25rem;letter-spacing:.0178571429em!important}.v-application .text-md-body-2,.v-application .text-md-button{font-size:.875rem!important;font-family:Roboto,sans-serif!important}.v-application .text-md-button{font-weight:500;line-height:2.25rem;letter-spacing:.0892857143em!important;text-transform:uppercase!important}.v-application .text-md-caption{font-weight:400;line-height:1.25rem;letter-spacing:.0333333333em!important}.v-application .text-md-caption,.v-application .text-md-overline{font-size:.75rem!important;font-family:Roboto,sans-serif!important}.v-application .text-md-overline{font-weight:500;line-height:2rem;letter-spacing:.1666666667em!important;text-transform:uppercase!important}}@media(min-width:1264px){.v-application .d-lg-none{display:none!important}.v-application .d-lg-inline{display:inline!important}.v-application .d-lg-inline-block{display:inline-block!important}.v-application .d-lg-block{display:block!important}.v-application .d-lg-table{display:table!important}.v-application .d-lg-table-row{display:table-row!important}.v-application .d-lg-table-cell{display:table-cell!important}.v-application .d-lg-flex{display:flex!important}.v-application .d-lg-inline-flex{display:inline-flex!important}.v-application .float-lg-none{float:none!important}.v-application .float-lg-left{float:left!important}.v-application .float-lg-right{float:right!important}.v-application--is-rtl .float-lg-end{float:left!important}.v-application--is-ltr .float-lg-end,.v-application--is-rtl .float-lg-start{float:right!important}.v-application--is-ltr .float-lg-start{float:left!important}.v-application .flex-lg-fill{flex:1 1 auto!important}.v-application .flex-lg-row{flex-direction:row!important}.v-application .flex-lg-column{flex-direction:column!important}.v-application .flex-lg-row-reverse{flex-direction:row-reverse!important}.v-application .flex-lg-column-reverse{flex-direction:column-reverse!important}.v-application .flex-lg-grow-0{flex-grow:0!important}.v-application .flex-lg-grow-1{flex-grow:1!important}.v-application .flex-lg-shrink-0{flex-shrink:0!important}.v-application .flex-lg-shrink-1{flex-shrink:1!important}.v-application .flex-lg-wrap{flex-wrap:wrap!important}.v-application .flex-lg-nowrap{flex-wrap:nowrap!important}.v-application .flex-lg-wrap-reverse{flex-wrap:wrap-reverse!important}.v-application .justify-lg-start{justify-content:flex-start!important}.v-application .justify-lg-end{justify-content:flex-end!important}.v-application .justify-lg-center{justify-content:center!important}.v-application .justify-lg-space-between{justify-content:space-between!important}.v-application .justify-lg-space-around{justify-content:space-around!important}.v-application .align-lg-start{align-items:flex-start!important}.v-application .align-lg-end{align-items:flex-end!important}.v-application .align-lg-center{align-items:center!important}.v-application .align-lg-baseline{align-items:baseline!important}.v-application .align-lg-stretch{align-items:stretch!important}.v-application .align-content-lg-start{align-content:flex-start!important}.v-application .align-content-lg-end{align-content:flex-end!important}.v-application .align-content-lg-center{align-content:center!important}.v-application .align-content-lg-space-between{align-content:space-between!important}.v-application .align-content-lg-space-around{align-content:space-around!important}.v-application .align-content-lg-stretch{align-content:stretch!important}.v-application .align-self-lg-auto{align-self:auto!important}.v-application .align-self-lg-start{align-self:flex-start!important}.v-application .align-self-lg-end{align-self:flex-end!important}.v-application .align-self-lg-center{align-self:center!important}.v-application .align-self-lg-baseline{align-self:baseline!important}.v-application .align-self-lg-stretch{align-self:stretch!important}.v-application .order-lg-first{order:-1!important}.v-application .order-lg-0{order:0!important}.v-application .order-lg-1{order:1!important}.v-application .order-lg-2{order:2!important}.v-application .order-lg-3{order:3!important}.v-application .order-lg-4{order:4!important}.v-application .order-lg-5{order:5!important}.v-application .order-lg-6{order:6!important}.v-application .order-lg-7{order:7!important}.v-application .order-lg-8{order:8!important}.v-application .order-lg-9{order:9!important}.v-application .order-lg-10{order:10!important}.v-application .order-lg-11{order:11!important}.v-application .order-lg-12{order:12!important}.v-application .order-lg-last{order:13!important}.v-application .ma-lg-0{margin:0!important}.v-application .ma-lg-1{margin:4px!important}.v-application .ma-lg-2{margin:8px!important}.v-application .ma-lg-3{margin:12px!important}.v-application .ma-lg-4{margin:16px!important}.v-application .ma-lg-5{margin:20px!important}.v-application .ma-lg-6{margin:24px!important}.v-application .ma-lg-7{margin:28px!important}.v-application .ma-lg-8{margin:32px!important}.v-application .ma-lg-9{margin:36px!important}.v-application .ma-lg-10{margin:40px!important}.v-application .ma-lg-11{margin:44px!important}.v-application .ma-lg-12{margin:48px!important}.v-application .ma-lg-13{margin:52px!important}.v-application .ma-lg-14{margin:56px!important}.v-application .ma-lg-15{margin:60px!important}.v-application .ma-lg-16{margin:64px!important}.v-application .ma-lg-auto{margin:auto!important}.v-application .mx-lg-0{margin-right:0!important;margin-left:0!important}.v-application .mx-lg-1{margin-right:4px!important;margin-left:4px!important}.v-application .mx-lg-2{margin-right:8px!important;margin-left:8px!important}.v-application .mx-lg-3{margin-right:12px!important;margin-left:12px!important}.v-application .mx-lg-4{margin-right:16px!important;margin-left:16px!important}.v-application .mx-lg-5{margin-right:20px!important;margin-left:20px!important}.v-application .mx-lg-6{margin-right:24px!important;margin-left:24px!important}.v-application .mx-lg-7{margin-right:28px!important;margin-left:28px!important}.v-application .mx-lg-8{margin-right:32px!important;margin-left:32px!important}.v-application .mx-lg-9{margin-right:36px!important;margin-left:36px!important}.v-application .mx-lg-10{margin-right:40px!important;margin-left:40px!important}.v-application .mx-lg-11{margin-right:44px!important;margin-left:44px!important}.v-application .mx-lg-12{margin-right:48px!important;margin-left:48px!important}.v-application .mx-lg-13{margin-right:52px!important;margin-left:52px!important}.v-application .mx-lg-14{margin-right:56px!important;margin-left:56px!important}.v-application .mx-lg-15{margin-right:60px!important;margin-left:60px!important}.v-application .mx-lg-16{margin-right:64px!important;margin-left:64px!important}.v-application .mx-lg-auto{margin-right:auto!important;margin-left:auto!important}.v-application .my-lg-0{margin-top:0!important;margin-bottom:0!important}.v-application .my-lg-1{margin-top:4px!important;margin-bottom:4px!important}.v-application .my-lg-2{margin-top:8px!important;margin-bottom:8px!important}.v-application .my-lg-3{margin-top:12px!important;margin-bottom:12px!important}.v-application .my-lg-4{margin-top:16px!important;margin-bottom:16px!important}.v-application .my-lg-5{margin-top:20px!important;margin-bottom:20px!important}.v-application .my-lg-6{margin-top:24px!important;margin-bottom:24px!important}.v-application .my-lg-7{margin-top:28px!important;margin-bottom:28px!important}.v-application .my-lg-8{margin-top:32px!important;margin-bottom:32px!important}.v-application .my-lg-9{margin-top:36px!important;margin-bottom:36px!important}.v-application .my-lg-10{margin-top:40px!important;margin-bottom:40px!important}.v-application .my-lg-11{margin-top:44px!important;margin-bottom:44px!important}.v-application .my-lg-12{margin-top:48px!important;margin-bottom:48px!important}.v-application .my-lg-13{margin-top:52px!important;margin-bottom:52px!important}.v-application .my-lg-14{margin-top:56px!important;margin-bottom:56px!important}.v-application .my-lg-15{margin-top:60px!important;margin-bottom:60px!important}.v-application .my-lg-16{margin-top:64px!important;margin-bottom:64px!important}.v-application .my-lg-auto{margin-top:auto!important;margin-bottom:auto!important}.v-application .mt-lg-0{margin-top:0!important}.v-application .mt-lg-1{margin-top:4px!important}.v-application .mt-lg-2{margin-top:8px!important}.v-application .mt-lg-3{margin-top:12px!important}.v-application .mt-lg-4{margin-top:16px!important}.v-application .mt-lg-5{margin-top:20px!important}.v-application .mt-lg-6{margin-top:24px!important}.v-application .mt-lg-7{margin-top:28px!important}.v-application .mt-lg-8{margin-top:32px!important}.v-application .mt-lg-9{margin-top:36px!important}.v-application .mt-lg-10{margin-top:40px!important}.v-application .mt-lg-11{margin-top:44px!important}.v-application .mt-lg-12{margin-top:48px!important}.v-application .mt-lg-13{margin-top:52px!important}.v-application .mt-lg-14{margin-top:56px!important}.v-application .mt-lg-15{margin-top:60px!important}.v-application .mt-lg-16{margin-top:64px!important}.v-application .mt-lg-auto{margin-top:auto!important}.v-application .mr-lg-0{margin-right:0!important}.v-application .mr-lg-1{margin-right:4px!important}.v-application .mr-lg-2{margin-right:8px!important}.v-application .mr-lg-3{margin-right:12px!important}.v-application .mr-lg-4{margin-right:16px!important}.v-application .mr-lg-5{margin-right:20px!important}.v-application .mr-lg-6{margin-right:24px!important}.v-application .mr-lg-7{margin-right:28px!important}.v-application .mr-lg-8{margin-right:32px!important}.v-application .mr-lg-9{margin-right:36px!important}.v-application .mr-lg-10{margin-right:40px!important}.v-application .mr-lg-11{margin-right:44px!important}.v-application .mr-lg-12{margin-right:48px!important}.v-application .mr-lg-13{margin-right:52px!important}.v-application .mr-lg-14{margin-right:56px!important}.v-application .mr-lg-15{margin-right:60px!important}.v-application .mr-lg-16{margin-right:64px!important}.v-application .mr-lg-auto{margin-right:auto!important}.v-application .mb-lg-0{margin-bottom:0!important}.v-application .mb-lg-1{margin-bottom:4px!important}.v-application .mb-lg-2{margin-bottom:8px!important}.v-application .mb-lg-3{margin-bottom:12px!important}.v-application .mb-lg-4{margin-bottom:16px!important}.v-application .mb-lg-5{margin-bottom:20px!important}.v-application .mb-lg-6{margin-bottom:24px!important}.v-application .mb-lg-7{margin-bottom:28px!important}.v-application .mb-lg-8{margin-bottom:32px!important}.v-application .mb-lg-9{margin-bottom:36px!important}.v-application .mb-lg-10{margin-bottom:40px!important}.v-application .mb-lg-11{margin-bottom:44px!important}.v-application .mb-lg-12{margin-bottom:48px!important}.v-application .mb-lg-13{margin-bottom:52px!important}.v-application .mb-lg-14{margin-bottom:56px!important}.v-application .mb-lg-15{margin-bottom:60px!important}.v-application .mb-lg-16{margin-bottom:64px!important}.v-application .mb-lg-auto{margin-bottom:auto!important}.v-application .ml-lg-0{margin-left:0!important}.v-application .ml-lg-1{margin-left:4px!important}.v-application .ml-lg-2{margin-left:8px!important}.v-application .ml-lg-3{margin-left:12px!important}.v-application .ml-lg-4{margin-left:16px!important}.v-application .ml-lg-5{margin-left:20px!important}.v-application .ml-lg-6{margin-left:24px!important}.v-application .ml-lg-7{margin-left:28px!important}.v-application .ml-lg-8{margin-left:32px!important}.v-application .ml-lg-9{margin-left:36px!important}.v-application .ml-lg-10{margin-left:40px!important}.v-application .ml-lg-11{margin-left:44px!important}.v-application .ml-lg-12{margin-left:48px!important}.v-application .ml-lg-13{margin-left:52px!important}.v-application .ml-lg-14{margin-left:56px!important}.v-application .ml-lg-15{margin-left:60px!important}.v-application .ml-lg-16{margin-left:64px!important}.v-application .ml-lg-auto{margin-left:auto!important}.v-application--is-ltr .ms-lg-0{margin-left:0!important}.v-application--is-rtl .ms-lg-0{margin-right:0!important}.v-application--is-ltr .ms-lg-1{margin-left:4px!important}.v-application--is-rtl .ms-lg-1{margin-right:4px!important}.v-application--is-ltr .ms-lg-2{margin-left:8px!important}.v-application--is-rtl .ms-lg-2{margin-right:8px!important}.v-application--is-ltr .ms-lg-3{margin-left:12px!important}.v-application--is-rtl .ms-lg-3{margin-right:12px!important}.v-application--is-ltr .ms-lg-4{margin-left:16px!important}.v-application--is-rtl .ms-lg-4{margin-right:16px!important}.v-application--is-ltr .ms-lg-5{margin-left:20px!important}.v-application--is-rtl .ms-lg-5{margin-right:20px!important}.v-application--is-ltr .ms-lg-6{margin-left:24px!important}.v-application--is-rtl .ms-lg-6{margin-right:24px!important}.v-application--is-ltr .ms-lg-7{margin-left:28px!important}.v-application--is-rtl .ms-lg-7{margin-right:28px!important}.v-application--is-ltr .ms-lg-8{margin-left:32px!important}.v-application--is-rtl .ms-lg-8{margin-right:32px!important}.v-application--is-ltr .ms-lg-9{margin-left:36px!important}.v-application--is-rtl .ms-lg-9{margin-right:36px!important}.v-application--is-ltr .ms-lg-10{margin-left:40px!important}.v-application--is-rtl .ms-lg-10{margin-right:40px!important}.v-application--is-ltr .ms-lg-11{margin-left:44px!important}.v-application--is-rtl .ms-lg-11{margin-right:44px!important}.v-application--is-ltr .ms-lg-12{margin-left:48px!important}.v-application--is-rtl .ms-lg-12{margin-right:48px!important}.v-application--is-ltr .ms-lg-13{margin-left:52px!important}.v-application--is-rtl .ms-lg-13{margin-right:52px!important}.v-application--is-ltr .ms-lg-14{margin-left:56px!important}.v-application--is-rtl .ms-lg-14{margin-right:56px!important}.v-application--is-ltr .ms-lg-15{margin-left:60px!important}.v-application--is-rtl .ms-lg-15{margin-right:60px!important}.v-application--is-ltr .ms-lg-16{margin-left:64px!important}.v-application--is-rtl .ms-lg-16{margin-right:64px!important}.v-application--is-ltr .ms-lg-auto{margin-left:auto!important}.v-application--is-rtl .ms-lg-auto{margin-right:auto!important}.v-application--is-ltr .me-lg-0{margin-right:0!important}.v-application--is-rtl .me-lg-0{margin-left:0!important}.v-application--is-ltr .me-lg-1{margin-right:4px!important}.v-application--is-rtl .me-lg-1{margin-left:4px!important}.v-application--is-ltr .me-lg-2{margin-right:8px!important}.v-application--is-rtl .me-lg-2{margin-left:8px!important}.v-application--is-ltr .me-lg-3{margin-right:12px!important}.v-application--is-rtl .me-lg-3{margin-left:12px!important}.v-application--is-ltr .me-lg-4{margin-right:16px!important}.v-application--is-rtl .me-lg-4{margin-left:16px!important}.v-application--is-ltr .me-lg-5{margin-right:20px!important}.v-application--is-rtl .me-lg-5{margin-left:20px!important}.v-application--is-ltr .me-lg-6{margin-right:24px!important}.v-application--is-rtl .me-lg-6{margin-left:24px!important}.v-application--is-ltr .me-lg-7{margin-right:28px!important}.v-application--is-rtl .me-lg-7{margin-left:28px!important}.v-application--is-ltr .me-lg-8{margin-right:32px!important}.v-application--is-rtl .me-lg-8{margin-left:32px!important}.v-application--is-ltr .me-lg-9{margin-right:36px!important}.v-application--is-rtl .me-lg-9{margin-left:36px!important}.v-application--is-ltr .me-lg-10{margin-right:40px!important}.v-application--is-rtl .me-lg-10{margin-left:40px!important}.v-application--is-ltr .me-lg-11{margin-right:44px!important}.v-application--is-rtl .me-lg-11{margin-left:44px!important}.v-application--is-ltr .me-lg-12{margin-right:48px!important}.v-application--is-rtl .me-lg-12{margin-left:48px!important}.v-application--is-ltr .me-lg-13{margin-right:52px!important}.v-application--is-rtl .me-lg-13{margin-left:52px!important}.v-application--is-ltr .me-lg-14{margin-right:56px!important}.v-application--is-rtl .me-lg-14{margin-left:56px!important}.v-application--is-ltr .me-lg-15{margin-right:60px!important}.v-application--is-rtl .me-lg-15{margin-left:60px!important}.v-application--is-ltr .me-lg-16{margin-right:64px!important}.v-application--is-rtl .me-lg-16{margin-left:64px!important}.v-application--is-ltr .me-lg-auto{margin-right:auto!important}.v-application--is-rtl .me-lg-auto{margin-left:auto!important}.v-application .ma-lg-n1{margin:-4px!important}.v-application .ma-lg-n2{margin:-8px!important}.v-application .ma-lg-n3{margin:-12px!important}.v-application .ma-lg-n4{margin:-16px!important}.v-application .ma-lg-n5{margin:-20px!important}.v-application .ma-lg-n6{margin:-24px!important}.v-application .ma-lg-n7{margin:-28px!important}.v-application .ma-lg-n8{margin:-32px!important}.v-application .ma-lg-n9{margin:-36px!important}.v-application .ma-lg-n10{margin:-40px!important}.v-application .ma-lg-n11{margin:-44px!important}.v-application .ma-lg-n12{margin:-48px!important}.v-application .ma-lg-n13{margin:-52px!important}.v-application .ma-lg-n14{margin:-56px!important}.v-application .ma-lg-n15{margin:-60px!important}.v-application .ma-lg-n16{margin:-64px!important}.v-application .mx-lg-n1{margin-right:-4px!important;margin-left:-4px!important}.v-application .mx-lg-n2{margin-right:-8px!important;margin-left:-8px!important}.v-application .mx-lg-n3{margin-right:-12px!important;margin-left:-12px!important}.v-application .mx-lg-n4{margin-right:-16px!important;margin-left:-16px!important}.v-application .mx-lg-n5{margin-right:-20px!important;margin-left:-20px!important}.v-application .mx-lg-n6{margin-right:-24px!important;margin-left:-24px!important}.v-application .mx-lg-n7{margin-right:-28px!important;margin-left:-28px!important}.v-application .mx-lg-n8{margin-right:-32px!important;margin-left:-32px!important}.v-application .mx-lg-n9{margin-right:-36px!important;margin-left:-36px!important}.v-application .mx-lg-n10{margin-right:-40px!important;margin-left:-40px!important}.v-application .mx-lg-n11{margin-right:-44px!important;margin-left:-44px!important}.v-application .mx-lg-n12{margin-right:-48px!important;margin-left:-48px!important}.v-application .mx-lg-n13{margin-right:-52px!important;margin-left:-52px!important}.v-application .mx-lg-n14{margin-right:-56px!important;margin-left:-56px!important}.v-application .mx-lg-n15{margin-right:-60px!important;margin-left:-60px!important}.v-application .mx-lg-n16{margin-right:-64px!important;margin-left:-64px!important}.v-application .my-lg-n1{margin-top:-4px!important;margin-bottom:-4px!important}.v-application .my-lg-n2{margin-top:-8px!important;margin-bottom:-8px!important}.v-application .my-lg-n3{margin-top:-12px!important;margin-bottom:-12px!important}.v-application .my-lg-n4{margin-top:-16px!important;margin-bottom:-16px!important}.v-application .my-lg-n5{margin-top:-20px!important;margin-bottom:-20px!important}.v-application .my-lg-n6{margin-top:-24px!important;margin-bottom:-24px!important}.v-application .my-lg-n7{margin-top:-28px!important;margin-bottom:-28px!important}.v-application .my-lg-n8{margin-top:-32px!important;margin-bottom:-32px!important}.v-application .my-lg-n9{margin-top:-36px!important;margin-bottom:-36px!important}.v-application .my-lg-n10{margin-top:-40px!important;margin-bottom:-40px!important}.v-application .my-lg-n11{margin-top:-44px!important;margin-bottom:-44px!important}.v-application .my-lg-n12{margin-top:-48px!important;margin-bottom:-48px!important}.v-application .my-lg-n13{margin-top:-52px!important;margin-bottom:-52px!important}.v-application .my-lg-n14{margin-top:-56px!important;margin-bottom:-56px!important}.v-application .my-lg-n15{margin-top:-60px!important;margin-bottom:-60px!important}.v-application .my-lg-n16{margin-top:-64px!important;margin-bottom:-64px!important}.v-application .mt-lg-n1{margin-top:-4px!important}.v-application .mt-lg-n2{margin-top:-8px!important}.v-application .mt-lg-n3{margin-top:-12px!important}.v-application .mt-lg-n4{margin-top:-16px!important}.v-application .mt-lg-n5{margin-top:-20px!important}.v-application .mt-lg-n6{margin-top:-24px!important}.v-application .mt-lg-n7{margin-top:-28px!important}.v-application .mt-lg-n8{margin-top:-32px!important}.v-application .mt-lg-n9{margin-top:-36px!important}.v-application .mt-lg-n10{margin-top:-40px!important}.v-application .mt-lg-n11{margin-top:-44px!important}.v-application .mt-lg-n12{margin-top:-48px!important}.v-application .mt-lg-n13{margin-top:-52px!important}.v-application .mt-lg-n14{margin-top:-56px!important}.v-application .mt-lg-n15{margin-top:-60px!important}.v-application .mt-lg-n16{margin-top:-64px!important}.v-application .mr-lg-n1{margin-right:-4px!important}.v-application .mr-lg-n2{margin-right:-8px!important}.v-application .mr-lg-n3{margin-right:-12px!important}.v-application .mr-lg-n4{margin-right:-16px!important}.v-application .mr-lg-n5{margin-right:-20px!important}.v-application .mr-lg-n6{margin-right:-24px!important}.v-application .mr-lg-n7{margin-right:-28px!important}.v-application .mr-lg-n8{margin-right:-32px!important}.v-application .mr-lg-n9{margin-right:-36px!important}.v-application .mr-lg-n10{margin-right:-40px!important}.v-application .mr-lg-n11{margin-right:-44px!important}.v-application .mr-lg-n12{margin-right:-48px!important}.v-application .mr-lg-n13{margin-right:-52px!important}.v-application .mr-lg-n14{margin-right:-56px!important}.v-application .mr-lg-n15{margin-right:-60px!important}.v-application .mr-lg-n16{margin-right:-64px!important}.v-application .mb-lg-n1{margin-bottom:-4px!important}.v-application .mb-lg-n2{margin-bottom:-8px!important}.v-application .mb-lg-n3{margin-bottom:-12px!important}.v-application .mb-lg-n4{margin-bottom:-16px!important}.v-application .mb-lg-n5{margin-bottom:-20px!important}.v-application .mb-lg-n6{margin-bottom:-24px!important}.v-application .mb-lg-n7{margin-bottom:-28px!important}.v-application .mb-lg-n8{margin-bottom:-32px!important}.v-application .mb-lg-n9{margin-bottom:-36px!important}.v-application .mb-lg-n10{margin-bottom:-40px!important}.v-application .mb-lg-n11{margin-bottom:-44px!important}.v-application .mb-lg-n12{margin-bottom:-48px!important}.v-application .mb-lg-n13{margin-bottom:-52px!important}.v-application .mb-lg-n14{margin-bottom:-56px!important}.v-application .mb-lg-n15{margin-bottom:-60px!important}.v-application .mb-lg-n16{margin-bottom:-64px!important}.v-application .ml-lg-n1{margin-left:-4px!important}.v-application .ml-lg-n2{margin-left:-8px!important}.v-application .ml-lg-n3{margin-left:-12px!important}.v-application .ml-lg-n4{margin-left:-16px!important}.v-application .ml-lg-n5{margin-left:-20px!important}.v-application .ml-lg-n6{margin-left:-24px!important}.v-application .ml-lg-n7{margin-left:-28px!important}.v-application .ml-lg-n8{margin-left:-32px!important}.v-application .ml-lg-n9{margin-left:-36px!important}.v-application .ml-lg-n10{margin-left:-40px!important}.v-application .ml-lg-n11{margin-left:-44px!important}.v-application .ml-lg-n12{margin-left:-48px!important}.v-application .ml-lg-n13{margin-left:-52px!important}.v-application .ml-lg-n14{margin-left:-56px!important}.v-application .ml-lg-n15{margin-left:-60px!important}.v-application .ml-lg-n16{margin-left:-64px!important}.v-application--is-ltr .ms-lg-n1{margin-left:-4px!important}.v-application--is-rtl .ms-lg-n1{margin-right:-4px!important}.v-application--is-ltr .ms-lg-n2{margin-left:-8px!important}.v-application--is-rtl .ms-lg-n2{margin-right:-8px!important}.v-application--is-ltr .ms-lg-n3{margin-left:-12px!important}.v-application--is-rtl .ms-lg-n3{margin-right:-12px!important}.v-application--is-ltr .ms-lg-n4{margin-left:-16px!important}.v-application--is-rtl .ms-lg-n4{margin-right:-16px!important}.v-application--is-ltr .ms-lg-n5{margin-left:-20px!important}.v-application--is-rtl .ms-lg-n5{margin-right:-20px!important}.v-application--is-ltr .ms-lg-n6{margin-left:-24px!important}.v-application--is-rtl .ms-lg-n6{margin-right:-24px!important}.v-application--is-ltr .ms-lg-n7{margin-left:-28px!important}.v-application--is-rtl .ms-lg-n7{margin-right:-28px!important}.v-application--is-ltr .ms-lg-n8{margin-left:-32px!important}.v-application--is-rtl .ms-lg-n8{margin-right:-32px!important}.v-application--is-ltr .ms-lg-n9{margin-left:-36px!important}.v-application--is-rtl .ms-lg-n9{margin-right:-36px!important}.v-application--is-ltr .ms-lg-n10{margin-left:-40px!important}.v-application--is-rtl .ms-lg-n10{margin-right:-40px!important}.v-application--is-ltr .ms-lg-n11{margin-left:-44px!important}.v-application--is-rtl .ms-lg-n11{margin-right:-44px!important}.v-application--is-ltr .ms-lg-n12{margin-left:-48px!important}.v-application--is-rtl .ms-lg-n12{margin-right:-48px!important}.v-application--is-ltr .ms-lg-n13{margin-left:-52px!important}.v-application--is-rtl .ms-lg-n13{margin-right:-52px!important}.v-application--is-ltr .ms-lg-n14{margin-left:-56px!important}.v-application--is-rtl .ms-lg-n14{margin-right:-56px!important}.v-application--is-ltr .ms-lg-n15{margin-left:-60px!important}.v-application--is-rtl .ms-lg-n15{margin-right:-60px!important}.v-application--is-ltr .ms-lg-n16{margin-left:-64px!important}.v-application--is-rtl .ms-lg-n16{margin-right:-64px!important}.v-application--is-ltr .me-lg-n1{margin-right:-4px!important}.v-application--is-rtl .me-lg-n1{margin-left:-4px!important}.v-application--is-ltr .me-lg-n2{margin-right:-8px!important}.v-application--is-rtl .me-lg-n2{margin-left:-8px!important}.v-application--is-ltr .me-lg-n3{margin-right:-12px!important}.v-application--is-rtl .me-lg-n3{margin-left:-12px!important}.v-application--is-ltr .me-lg-n4{margin-right:-16px!important}.v-application--is-rtl .me-lg-n4{margin-left:-16px!important}.v-application--is-ltr .me-lg-n5{margin-right:-20px!important}.v-application--is-rtl .me-lg-n5{margin-left:-20px!important}.v-application--is-ltr .me-lg-n6{margin-right:-24px!important}.v-application--is-rtl .me-lg-n6{margin-left:-24px!important}.v-application--is-ltr .me-lg-n7{margin-right:-28px!important}.v-application--is-rtl .me-lg-n7{margin-left:-28px!important}.v-application--is-ltr .me-lg-n8{margin-right:-32px!important}.v-application--is-rtl .me-lg-n8{margin-left:-32px!important}.v-application--is-ltr .me-lg-n9{margin-right:-36px!important}.v-application--is-rtl .me-lg-n9{margin-left:-36px!important}.v-application--is-ltr .me-lg-n10{margin-right:-40px!important}.v-application--is-rtl .me-lg-n10{margin-left:-40px!important}.v-application--is-ltr .me-lg-n11{margin-right:-44px!important}.v-application--is-rtl .me-lg-n11{margin-left:-44px!important}.v-application--is-ltr .me-lg-n12{margin-right:-48px!important}.v-application--is-rtl .me-lg-n12{margin-left:-48px!important}.v-application--is-ltr .me-lg-n13{margin-right:-52px!important}.v-application--is-rtl .me-lg-n13{margin-left:-52px!important}.v-application--is-ltr .me-lg-n14{margin-right:-56px!important}.v-application--is-rtl .me-lg-n14{margin-left:-56px!important}.v-application--is-ltr .me-lg-n15{margin-right:-60px!important}.v-application--is-rtl .me-lg-n15{margin-left:-60px!important}.v-application--is-ltr .me-lg-n16{margin-right:-64px!important}.v-application--is-rtl .me-lg-n16{margin-left:-64px!important}.v-application .pa-lg-0{padding:0!important}.v-application .pa-lg-1{padding:4px!important}.v-application .pa-lg-2{padding:8px!important}.v-application .pa-lg-3{padding:12px!important}.v-application .pa-lg-4{padding:16px!important}.v-application .pa-lg-5{padding:20px!important}.v-application .pa-lg-6{padding:24px!important}.v-application .pa-lg-7{padding:28px!important}.v-application .pa-lg-8{padding:32px!important}.v-application .pa-lg-9{padding:36px!important}.v-application .pa-lg-10{padding:40px!important}.v-application .pa-lg-11{padding:44px!important}.v-application .pa-lg-12{padding:48px!important}.v-application .pa-lg-13{padding:52px!important}.v-application .pa-lg-14{padding:56px!important}.v-application .pa-lg-15{padding:60px!important}.v-application .pa-lg-16{padding:64px!important}.v-application .px-lg-0{padding-right:0!important;padding-left:0!important}.v-application .px-lg-1{padding-right:4px!important;padding-left:4px!important}.v-application .px-lg-2{padding-right:8px!important;padding-left:8px!important}.v-application .px-lg-3{padding-right:12px!important;padding-left:12px!important}.v-application .px-lg-4{padding-right:16px!important;padding-left:16px!important}.v-application .px-lg-5{padding-right:20px!important;padding-left:20px!important}.v-application .px-lg-6{padding-right:24px!important;padding-left:24px!important}.v-application .px-lg-7{padding-right:28px!important;padding-left:28px!important}.v-application .px-lg-8{padding-right:32px!important;padding-left:32px!important}.v-application .px-lg-9{padding-right:36px!important;padding-left:36px!important}.v-application .px-lg-10{padding-right:40px!important;padding-left:40px!important}.v-application .px-lg-11{padding-right:44px!important;padding-left:44px!important}.v-application .px-lg-12{padding-right:48px!important;padding-left:48px!important}.v-application .px-lg-13{padding-right:52px!important;padding-left:52px!important}.v-application .px-lg-14{padding-right:56px!important;padding-left:56px!important}.v-application .px-lg-15{padding-right:60px!important;padding-left:60px!important}.v-application .px-lg-16{padding-right:64px!important;padding-left:64px!important}.v-application .py-lg-0{padding-top:0!important;padding-bottom:0!important}.v-application .py-lg-1{padding-top:4px!important;padding-bottom:4px!important}.v-application .py-lg-2{padding-top:8px!important;padding-bottom:8px!important}.v-application .py-lg-3{padding-top:12px!important;padding-bottom:12px!important}.v-application .py-lg-4{padding-top:16px!important;padding-bottom:16px!important}.v-application .py-lg-5{padding-top:20px!important;padding-bottom:20px!important}.v-application .py-lg-6{padding-top:24px!important;padding-bottom:24px!important}.v-application .py-lg-7{padding-top:28px!important;padding-bottom:28px!important}.v-application .py-lg-8{padding-top:32px!important;padding-bottom:32px!important}.v-application .py-lg-9{padding-top:36px!important;padding-bottom:36px!important}.v-application .py-lg-10{padding-top:40px!important;padding-bottom:40px!important}.v-application .py-lg-11{padding-top:44px!important;padding-bottom:44px!important}.v-application .py-lg-12{padding-top:48px!important;padding-bottom:48px!important}.v-application .py-lg-13{padding-top:52px!important;padding-bottom:52px!important}.v-application .py-lg-14{padding-top:56px!important;padding-bottom:56px!important}.v-application .py-lg-15{padding-top:60px!important;padding-bottom:60px!important}.v-application .py-lg-16{padding-top:64px!important;padding-bottom:64px!important}.v-application .pt-lg-0{padding-top:0!important}.v-application .pt-lg-1{padding-top:4px!important}.v-application .pt-lg-2{padding-top:8px!important}.v-application .pt-lg-3{padding-top:12px!important}.v-application .pt-lg-4{padding-top:16px!important}.v-application .pt-lg-5{padding-top:20px!important}.v-application .pt-lg-6{padding-top:24px!important}.v-application .pt-lg-7{padding-top:28px!important}.v-application .pt-lg-8{padding-top:32px!important}.v-application .pt-lg-9{padding-top:36px!important}.v-application .pt-lg-10{padding-top:40px!important}.v-application .pt-lg-11{padding-top:44px!important}.v-application .pt-lg-12{padding-top:48px!important}.v-application .pt-lg-13{padding-top:52px!important}.v-application .pt-lg-14{padding-top:56px!important}.v-application .pt-lg-15{padding-top:60px!important}.v-application .pt-lg-16{padding-top:64px!important}.v-application .pr-lg-0{padding-right:0!important}.v-application .pr-lg-1{padding-right:4px!important}.v-application .pr-lg-2{padding-right:8px!important}.v-application .pr-lg-3{padding-right:12px!important}.v-application .pr-lg-4{padding-right:16px!important}.v-application .pr-lg-5{padding-right:20px!important}.v-application .pr-lg-6{padding-right:24px!important}.v-application .pr-lg-7{padding-right:28px!important}.v-application .pr-lg-8{padding-right:32px!important}.v-application .pr-lg-9{padding-right:36px!important}.v-application .pr-lg-10{padding-right:40px!important}.v-application .pr-lg-11{padding-right:44px!important}.v-application .pr-lg-12{padding-right:48px!important}.v-application .pr-lg-13{padding-right:52px!important}.v-application .pr-lg-14{padding-right:56px!important}.v-application .pr-lg-15{padding-right:60px!important}.v-application .pr-lg-16{padding-right:64px!important}.v-application .pb-lg-0{padding-bottom:0!important}.v-application .pb-lg-1{padding-bottom:4px!important}.v-application .pb-lg-2{padding-bottom:8px!important}.v-application .pb-lg-3{padding-bottom:12px!important}.v-application .pb-lg-4{padding-bottom:16px!important}.v-application .pb-lg-5{padding-bottom:20px!important}.v-application .pb-lg-6{padding-bottom:24px!important}.v-application .pb-lg-7{padding-bottom:28px!important}.v-application .pb-lg-8{padding-bottom:32px!important}.v-application .pb-lg-9{padding-bottom:36px!important}.v-application .pb-lg-10{padding-bottom:40px!important}.v-application .pb-lg-11{padding-bottom:44px!important}.v-application .pb-lg-12{padding-bottom:48px!important}.v-application .pb-lg-13{padding-bottom:52px!important}.v-application .pb-lg-14{padding-bottom:56px!important}.v-application .pb-lg-15{padding-bottom:60px!important}.v-application .pb-lg-16{padding-bottom:64px!important}.v-application .pl-lg-0{padding-left:0!important}.v-application .pl-lg-1{padding-left:4px!important}.v-application .pl-lg-2{padding-left:8px!important}.v-application .pl-lg-3{padding-left:12px!important}.v-application .pl-lg-4{padding-left:16px!important}.v-application .pl-lg-5{padding-left:20px!important}.v-application .pl-lg-6{padding-left:24px!important}.v-application .pl-lg-7{padding-left:28px!important}.v-application .pl-lg-8{padding-left:32px!important}.v-application .pl-lg-9{padding-left:36px!important}.v-application .pl-lg-10{padding-left:40px!important}.v-application .pl-lg-11{padding-left:44px!important}.v-application .pl-lg-12{padding-left:48px!important}.v-application .pl-lg-13{padding-left:52px!important}.v-application .pl-lg-14{padding-left:56px!important}.v-application .pl-lg-15{padding-left:60px!important}.v-application .pl-lg-16{padding-left:64px!important}.v-application--is-ltr .ps-lg-0{padding-left:0!important}.v-application--is-rtl .ps-lg-0{padding-right:0!important}.v-application--is-ltr .ps-lg-1{padding-left:4px!important}.v-application--is-rtl .ps-lg-1{padding-right:4px!important}.v-application--is-ltr .ps-lg-2{padding-left:8px!important}.v-application--is-rtl .ps-lg-2{padding-right:8px!important}.v-application--is-ltr .ps-lg-3{padding-left:12px!important}.v-application--is-rtl .ps-lg-3{padding-right:12px!important}.v-application--is-ltr .ps-lg-4{padding-left:16px!important}.v-application--is-rtl .ps-lg-4{padding-right:16px!important}.v-application--is-ltr .ps-lg-5{padding-left:20px!important}.v-application--is-rtl .ps-lg-5{padding-right:20px!important}.v-application--is-ltr .ps-lg-6{padding-left:24px!important}.v-application--is-rtl .ps-lg-6{padding-right:24px!important}.v-application--is-ltr .ps-lg-7{padding-left:28px!important}.v-application--is-rtl .ps-lg-7{padding-right:28px!important}.v-application--is-ltr .ps-lg-8{padding-left:32px!important}.v-application--is-rtl .ps-lg-8{padding-right:32px!important}.v-application--is-ltr .ps-lg-9{padding-left:36px!important}.v-application--is-rtl .ps-lg-9{padding-right:36px!important}.v-application--is-ltr .ps-lg-10{padding-left:40px!important}.v-application--is-rtl .ps-lg-10{padding-right:40px!important}.v-application--is-ltr .ps-lg-11{padding-left:44px!important}.v-application--is-rtl .ps-lg-11{padding-right:44px!important}.v-application--is-ltr .ps-lg-12{padding-left:48px!important}.v-application--is-rtl .ps-lg-12{padding-right:48px!important}.v-application--is-ltr .ps-lg-13{padding-left:52px!important}.v-application--is-rtl .ps-lg-13{padding-right:52px!important}.v-application--is-ltr .ps-lg-14{padding-left:56px!important}.v-application--is-rtl .ps-lg-14{padding-right:56px!important}.v-application--is-ltr .ps-lg-15{padding-left:60px!important}.v-application--is-rtl .ps-lg-15{padding-right:60px!important}.v-application--is-ltr .ps-lg-16{padding-left:64px!important}.v-application--is-rtl .ps-lg-16{padding-right:64px!important}.v-application--is-ltr .pe-lg-0{padding-right:0!important}.v-application--is-rtl .pe-lg-0{padding-left:0!important}.v-application--is-ltr .pe-lg-1{padding-right:4px!important}.v-application--is-rtl .pe-lg-1{padding-left:4px!important}.v-application--is-ltr .pe-lg-2{padding-right:8px!important}.v-application--is-rtl .pe-lg-2{padding-left:8px!important}.v-application--is-ltr .pe-lg-3{padding-right:12px!important}.v-application--is-rtl .pe-lg-3{padding-left:12px!important}.v-application--is-ltr .pe-lg-4{padding-right:16px!important}.v-application--is-rtl .pe-lg-4{padding-left:16px!important}.v-application--is-ltr .pe-lg-5{padding-right:20px!important}.v-application--is-rtl .pe-lg-5{padding-left:20px!important}.v-application--is-ltr .pe-lg-6{padding-right:24px!important}.v-application--is-rtl .pe-lg-6{padding-left:24px!important}.v-application--is-ltr .pe-lg-7{padding-right:28px!important}.v-application--is-rtl .pe-lg-7{padding-left:28px!important}.v-application--is-ltr .pe-lg-8{padding-right:32px!important}.v-application--is-rtl .pe-lg-8{padding-left:32px!important}.v-application--is-ltr .pe-lg-9{padding-right:36px!important}.v-application--is-rtl .pe-lg-9{padding-left:36px!important}.v-application--is-ltr .pe-lg-10{padding-right:40px!important}.v-application--is-rtl .pe-lg-10{padding-left:40px!important}.v-application--is-ltr .pe-lg-11{padding-right:44px!important}.v-application--is-rtl .pe-lg-11{padding-left:44px!important}.v-application--is-ltr .pe-lg-12{padding-right:48px!important}.v-application--is-rtl .pe-lg-12{padding-left:48px!important}.v-application--is-ltr .pe-lg-13{padding-right:52px!important}.v-application--is-rtl .pe-lg-13{padding-left:52px!important}.v-application--is-ltr .pe-lg-14{padding-right:56px!important}.v-application--is-rtl .pe-lg-14{padding-left:56px!important}.v-application--is-ltr .pe-lg-15{padding-right:60px!important}.v-application--is-rtl .pe-lg-15{padding-left:60px!important}.v-application--is-ltr .pe-lg-16{padding-right:64px!important}.v-application--is-rtl .pe-lg-16{padding-left:64px!important}.v-application .text-lg-left{text-align:left!important}.v-application .text-lg-right{text-align:right!important}.v-application .text-lg-center{text-align:center!important}.v-application .text-lg-justify{text-align:justify!important}.v-application .text-lg-start{text-align:start!important}.v-application .text-lg-end{text-align:end!important}.v-application .text-lg-h1{font-size:6rem!important;line-height:6rem;letter-spacing:-.015625em!important}.v-application .text-lg-h1,.v-application .text-lg-h2{font-weight:300;font-family:Roboto,sans-serif!important}.v-application .text-lg-h2{font-size:3.75rem!important;line-height:3.75rem;letter-spacing:-.0083333333em!important}.v-application .text-lg-h3{font-size:3rem!important;line-height:3.125rem;letter-spacing:normal!important}.v-application .text-lg-h3,.v-application .text-lg-h4{font-weight:400;font-family:Roboto,sans-serif!important}.v-application .text-lg-h4{font-size:2.125rem!important;line-height:2.5rem;letter-spacing:.0073529412em!important}.v-application .text-lg-h5{font-size:1.5rem!important;font-weight:400;letter-spacing:normal!important}.v-application .text-lg-h5,.v-application .text-lg-h6{line-height:2rem;font-family:Roboto,sans-serif!important}.v-application .text-lg-h6{font-size:1.25rem!important;font-weight:500;letter-spacing:.0125em!important}.v-application .text-lg-subtitle-1{font-size:1rem!important;font-weight:400;line-height:1.75rem;letter-spacing:.009375em!important;font-family:Roboto,sans-serif!important}.v-application .text-lg-subtitle-2{font-size:.875rem!important;font-weight:500;line-height:1.375rem;letter-spacing:.0071428571em!important;font-family:Roboto,sans-serif!important}.v-application .text-lg-body-1{font-size:1rem!important;font-weight:400;line-height:1.5rem;letter-spacing:.03125em!important;font-family:Roboto,sans-serif!important}.v-application .text-lg-body-2{font-weight:400;line-height:1.25rem;letter-spacing:.0178571429em!important}.v-application .text-lg-body-2,.v-application .text-lg-button{font-size:.875rem!important;font-family:Roboto,sans-serif!important}.v-application .text-lg-button{font-weight:500;line-height:2.25rem;letter-spacing:.0892857143em!important;text-transform:uppercase!important}.v-application .text-lg-caption{font-weight:400;line-height:1.25rem;letter-spacing:.0333333333em!important}.v-application .text-lg-caption,.v-application .text-lg-overline{font-size:.75rem!important;font-family:Roboto,sans-serif!important}.v-application .text-lg-overline{font-weight:500;line-height:2rem;letter-spacing:.1666666667em!important;text-transform:uppercase!important}}@media(min-width:1904px){.v-application .d-xl-none{display:none!important}.v-application .d-xl-inline{display:inline!important}.v-application .d-xl-inline-block{display:inline-block!important}.v-application .d-xl-block{display:block!important}.v-application .d-xl-table{display:table!important}.v-application .d-xl-table-row{display:table-row!important}.v-application .d-xl-table-cell{display:table-cell!important}.v-application .d-xl-flex{display:flex!important}.v-application .d-xl-inline-flex{display:inline-flex!important}.v-application .float-xl-none{float:none!important}.v-application .float-xl-left{float:left!important}.v-application .float-xl-right{float:right!important}.v-application--is-rtl .float-xl-end{float:left!important}.v-application--is-ltr .float-xl-end,.v-application--is-rtl .float-xl-start{float:right!important}.v-application--is-ltr .float-xl-start{float:left!important}.v-application .flex-xl-fill{flex:1 1 auto!important}.v-application .flex-xl-row{flex-direction:row!important}.v-application .flex-xl-column{flex-direction:column!important}.v-application .flex-xl-row-reverse{flex-direction:row-reverse!important}.v-application .flex-xl-column-reverse{flex-direction:column-reverse!important}.v-application .flex-xl-grow-0{flex-grow:0!important}.v-application .flex-xl-grow-1{flex-grow:1!important}.v-application .flex-xl-shrink-0{flex-shrink:0!important}.v-application .flex-xl-shrink-1{flex-shrink:1!important}.v-application .flex-xl-wrap{flex-wrap:wrap!important}.v-application .flex-xl-nowrap{flex-wrap:nowrap!important}.v-application .flex-xl-wrap-reverse{flex-wrap:wrap-reverse!important}.v-application .justify-xl-start{justify-content:flex-start!important}.v-application .justify-xl-end{justify-content:flex-end!important}.v-application .justify-xl-center{justify-content:center!important}.v-application .justify-xl-space-between{justify-content:space-between!important}.v-application .justify-xl-space-around{justify-content:space-around!important}.v-application .align-xl-start{align-items:flex-start!important}.v-application .align-xl-end{align-items:flex-end!important}.v-application .align-xl-center{align-items:center!important}.v-application .align-xl-baseline{align-items:baseline!important}.v-application .align-xl-stretch{align-items:stretch!important}.v-application .align-content-xl-start{align-content:flex-start!important}.v-application .align-content-xl-end{align-content:flex-end!important}.v-application .align-content-xl-center{align-content:center!important}.v-application .align-content-xl-space-between{align-content:space-between!important}.v-application .align-content-xl-space-around{align-content:space-around!important}.v-application .align-content-xl-stretch{align-content:stretch!important}.v-application .align-self-xl-auto{align-self:auto!important}.v-application .align-self-xl-start{align-self:flex-start!important}.v-application .align-self-xl-end{align-self:flex-end!important}.v-application .align-self-xl-center{align-self:center!important}.v-application .align-self-xl-baseline{align-self:baseline!important}.v-application .align-self-xl-stretch{align-self:stretch!important}.v-application .order-xl-first{order:-1!important}.v-application .order-xl-0{order:0!important}.v-application .order-xl-1{order:1!important}.v-application .order-xl-2{order:2!important}.v-application .order-xl-3{order:3!important}.v-application .order-xl-4{order:4!important}.v-application .order-xl-5{order:5!important}.v-application .order-xl-6{order:6!important}.v-application .order-xl-7{order:7!important}.v-application .order-xl-8{order:8!important}.v-application .order-xl-9{order:9!important}.v-application .order-xl-10{order:10!important}.v-application .order-xl-11{order:11!important}.v-application .order-xl-12{order:12!important}.v-application .order-xl-last{order:13!important}.v-application .ma-xl-0{margin:0!important}.v-application .ma-xl-1{margin:4px!important}.v-application .ma-xl-2{margin:8px!important}.v-application .ma-xl-3{margin:12px!important}.v-application .ma-xl-4{margin:16px!important}.v-application .ma-xl-5{margin:20px!important}.v-application .ma-xl-6{margin:24px!important}.v-application .ma-xl-7{margin:28px!important}.v-application .ma-xl-8{margin:32px!important}.v-application .ma-xl-9{margin:36px!important}.v-application .ma-xl-10{margin:40px!important}.v-application .ma-xl-11{margin:44px!important}.v-application .ma-xl-12{margin:48px!important}.v-application .ma-xl-13{margin:52px!important}.v-application .ma-xl-14{margin:56px!important}.v-application .ma-xl-15{margin:60px!important}.v-application .ma-xl-16{margin:64px!important}.v-application .ma-xl-auto{margin:auto!important}.v-application .mx-xl-0{margin-right:0!important;margin-left:0!important}.v-application .mx-xl-1{margin-right:4px!important;margin-left:4px!important}.v-application .mx-xl-2{margin-right:8px!important;margin-left:8px!important}.v-application .mx-xl-3{margin-right:12px!important;margin-left:12px!important}.v-application .mx-xl-4{margin-right:16px!important;margin-left:16px!important}.v-application .mx-xl-5{margin-right:20px!important;margin-left:20px!important}.v-application .mx-xl-6{margin-right:24px!important;margin-left:24px!important}.v-application .mx-xl-7{margin-right:28px!important;margin-left:28px!important}.v-application .mx-xl-8{margin-right:32px!important;margin-left:32px!important}.v-application .mx-xl-9{margin-right:36px!important;margin-left:36px!important}.v-application .mx-xl-10{margin-right:40px!important;margin-left:40px!important}.v-application .mx-xl-11{margin-right:44px!important;margin-left:44px!important}.v-application .mx-xl-12{margin-right:48px!important;margin-left:48px!important}.v-application .mx-xl-13{margin-right:52px!important;margin-left:52px!important}.v-application .mx-xl-14{margin-right:56px!important;margin-left:56px!important}.v-application .mx-xl-15{margin-right:60px!important;margin-left:60px!important}.v-application .mx-xl-16{margin-right:64px!important;margin-left:64px!important}.v-application .mx-xl-auto{margin-right:auto!important;margin-left:auto!important}.v-application .my-xl-0{margin-top:0!important;margin-bottom:0!important}.v-application .my-xl-1{margin-top:4px!important;margin-bottom:4px!important}.v-application .my-xl-2{margin-top:8px!important;margin-bottom:8px!important}.v-application .my-xl-3{margin-top:12px!important;margin-bottom:12px!important}.v-application .my-xl-4{margin-top:16px!important;margin-bottom:16px!important}.v-application .my-xl-5{margin-top:20px!important;margin-bottom:20px!important}.v-application .my-xl-6{margin-top:24px!important;margin-bottom:24px!important}.v-application .my-xl-7{margin-top:28px!important;margin-bottom:28px!important}.v-application .my-xl-8{margin-top:32px!important;margin-bottom:32px!important}.v-application .my-xl-9{margin-top:36px!important;margin-bottom:36px!important}.v-application .my-xl-10{margin-top:40px!important;margin-bottom:40px!important}.v-application .my-xl-11{margin-top:44px!important;margin-bottom:44px!important}.v-application .my-xl-12{margin-top:48px!important;margin-bottom:48px!important}.v-application .my-xl-13{margin-top:52px!important;margin-bottom:52px!important}.v-application .my-xl-14{margin-top:56px!important;margin-bottom:56px!important}.v-application .my-xl-15{margin-top:60px!important;margin-bottom:60px!important}.v-application .my-xl-16{margin-top:64px!important;margin-bottom:64px!important}.v-application .my-xl-auto{margin-top:auto!important;margin-bottom:auto!important}.v-application .mt-xl-0{margin-top:0!important}.v-application .mt-xl-1{margin-top:4px!important}.v-application .mt-xl-2{margin-top:8px!important}.v-application .mt-xl-3{margin-top:12px!important}.v-application .mt-xl-4{margin-top:16px!important}.v-application .mt-xl-5{margin-top:20px!important}.v-application .mt-xl-6{margin-top:24px!important}.v-application .mt-xl-7{margin-top:28px!important}.v-application .mt-xl-8{margin-top:32px!important}.v-application .mt-xl-9{margin-top:36px!important}.v-application .mt-xl-10{margin-top:40px!important}.v-application .mt-xl-11{margin-top:44px!important}.v-application .mt-xl-12{margin-top:48px!important}.v-application .mt-xl-13{margin-top:52px!important}.v-application .mt-xl-14{margin-top:56px!important}.v-application .mt-xl-15{margin-top:60px!important}.v-application .mt-xl-16{margin-top:64px!important}.v-application .mt-xl-auto{margin-top:auto!important}.v-application .mr-xl-0{margin-right:0!important}.v-application .mr-xl-1{margin-right:4px!important}.v-application .mr-xl-2{margin-right:8px!important}.v-application .mr-xl-3{margin-right:12px!important}.v-application .mr-xl-4{margin-right:16px!important}.v-application .mr-xl-5{margin-right:20px!important}.v-application .mr-xl-6{margin-right:24px!important}.v-application .mr-xl-7{margin-right:28px!important}.v-application .mr-xl-8{margin-right:32px!important}.v-application .mr-xl-9{margin-right:36px!important}.v-application .mr-xl-10{margin-right:40px!important}.v-application .mr-xl-11{margin-right:44px!important}.v-application .mr-xl-12{margin-right:48px!important}.v-application .mr-xl-13{margin-right:52px!important}.v-application .mr-xl-14{margin-right:56px!important}.v-application .mr-xl-15{margin-right:60px!important}.v-application .mr-xl-16{margin-right:64px!important}.v-application .mr-xl-auto{margin-right:auto!important}.v-application .mb-xl-0{margin-bottom:0!important}.v-application .mb-xl-1{margin-bottom:4px!important}.v-application .mb-xl-2{margin-bottom:8px!important}.v-application .mb-xl-3{margin-bottom:12px!important}.v-application .mb-xl-4{margin-bottom:16px!important}.v-application .mb-xl-5{margin-bottom:20px!important}.v-application .mb-xl-6{margin-bottom:24px!important}.v-application .mb-xl-7{margin-bottom:28px!important}.v-application .mb-xl-8{margin-bottom:32px!important}.v-application .mb-xl-9{margin-bottom:36px!important}.v-application .mb-xl-10{margin-bottom:40px!important}.v-application .mb-xl-11{margin-bottom:44px!important}.v-application .mb-xl-12{margin-bottom:48px!important}.v-application .mb-xl-13{margin-bottom:52px!important}.v-application .mb-xl-14{margin-bottom:56px!important}.v-application .mb-xl-15{margin-bottom:60px!important}.v-application .mb-xl-16{margin-bottom:64px!important}.v-application .mb-xl-auto{margin-bottom:auto!important}.v-application .ml-xl-0{margin-left:0!important}.v-application .ml-xl-1{margin-left:4px!important}.v-application .ml-xl-2{margin-left:8px!important}.v-application .ml-xl-3{margin-left:12px!important}.v-application .ml-xl-4{margin-left:16px!important}.v-application .ml-xl-5{margin-left:20px!important}.v-application .ml-xl-6{margin-left:24px!important}.v-application .ml-xl-7{margin-left:28px!important}.v-application .ml-xl-8{margin-left:32px!important}.v-application .ml-xl-9{margin-left:36px!important}.v-application .ml-xl-10{margin-left:40px!important}.v-application .ml-xl-11{margin-left:44px!important}.v-application .ml-xl-12{margin-left:48px!important}.v-application .ml-xl-13{margin-left:52px!important}.v-application .ml-xl-14{margin-left:56px!important}.v-application .ml-xl-15{margin-left:60px!important}.v-application .ml-xl-16{margin-left:64px!important}.v-application .ml-xl-auto{margin-left:auto!important}.v-application--is-ltr .ms-xl-0{margin-left:0!important}.v-application--is-rtl .ms-xl-0{margin-right:0!important}.v-application--is-ltr .ms-xl-1{margin-left:4px!important}.v-application--is-rtl .ms-xl-1{margin-right:4px!important}.v-application--is-ltr .ms-xl-2{margin-left:8px!important}.v-application--is-rtl .ms-xl-2{margin-right:8px!important}.v-application--is-ltr .ms-xl-3{margin-left:12px!important}.v-application--is-rtl .ms-xl-3{margin-right:12px!important}.v-application--is-ltr .ms-xl-4{margin-left:16px!important}.v-application--is-rtl .ms-xl-4{margin-right:16px!important}.v-application--is-ltr .ms-xl-5{margin-left:20px!important}.v-application--is-rtl .ms-xl-5{margin-right:20px!important}.v-application--is-ltr .ms-xl-6{margin-left:24px!important}.v-application--is-rtl .ms-xl-6{margin-right:24px!important}.v-application--is-ltr .ms-xl-7{margin-left:28px!important}.v-application--is-rtl .ms-xl-7{margin-right:28px!important}.v-application--is-ltr .ms-xl-8{margin-left:32px!important}.v-application--is-rtl .ms-xl-8{margin-right:32px!important}.v-application--is-ltr .ms-xl-9{margin-left:36px!important}.v-application--is-rtl .ms-xl-9{margin-right:36px!important}.v-application--is-ltr .ms-xl-10{margin-left:40px!important}.v-application--is-rtl .ms-xl-10{margin-right:40px!important}.v-application--is-ltr .ms-xl-11{margin-left:44px!important}.v-application--is-rtl .ms-xl-11{margin-right:44px!important}.v-application--is-ltr .ms-xl-12{margin-left:48px!important}.v-application--is-rtl .ms-xl-12{margin-right:48px!important}.v-application--is-ltr .ms-xl-13{margin-left:52px!important}.v-application--is-rtl .ms-xl-13{margin-right:52px!important}.v-application--is-ltr .ms-xl-14{margin-left:56px!important}.v-application--is-rtl .ms-xl-14{margin-right:56px!important}.v-application--is-ltr .ms-xl-15{margin-left:60px!important}.v-application--is-rtl .ms-xl-15{margin-right:60px!important}.v-application--is-ltr .ms-xl-16{margin-left:64px!important}.v-application--is-rtl .ms-xl-16{margin-right:64px!important}.v-application--is-ltr .ms-xl-auto{margin-left:auto!important}.v-application--is-rtl .ms-xl-auto{margin-right:auto!important}.v-application--is-ltr .me-xl-0{margin-right:0!important}.v-application--is-rtl .me-xl-0{margin-left:0!important}.v-application--is-ltr .me-xl-1{margin-right:4px!important}.v-application--is-rtl .me-xl-1{margin-left:4px!important}.v-application--is-ltr .me-xl-2{margin-right:8px!important}.v-application--is-rtl .me-xl-2{margin-left:8px!important}.v-application--is-ltr .me-xl-3{margin-right:12px!important}.v-application--is-rtl .me-xl-3{margin-left:12px!important}.v-application--is-ltr .me-xl-4{margin-right:16px!important}.v-application--is-rtl .me-xl-4{margin-left:16px!important}.v-application--is-ltr .me-xl-5{margin-right:20px!important}.v-application--is-rtl .me-xl-5{margin-left:20px!important}.v-application--is-ltr .me-xl-6{margin-right:24px!important}.v-application--is-rtl .me-xl-6{margin-left:24px!important}.v-application--is-ltr .me-xl-7{margin-right:28px!important}.v-application--is-rtl .me-xl-7{margin-left:28px!important}.v-application--is-ltr .me-xl-8{margin-right:32px!important}.v-application--is-rtl .me-xl-8{margin-left:32px!important}.v-application--is-ltr .me-xl-9{margin-right:36px!important}.v-application--is-rtl .me-xl-9{margin-left:36px!important}.v-application--is-ltr .me-xl-10{margin-right:40px!important}.v-application--is-rtl .me-xl-10{margin-left:40px!important}.v-application--is-ltr .me-xl-11{margin-right:44px!important}.v-application--is-rtl .me-xl-11{margin-left:44px!important}.v-application--is-ltr .me-xl-12{margin-right:48px!important}.v-application--is-rtl .me-xl-12{margin-left:48px!important}.v-application--is-ltr .me-xl-13{margin-right:52px!important}.v-application--is-rtl .me-xl-13{margin-left:52px!important}.v-application--is-ltr .me-xl-14{margin-right:56px!important}.v-application--is-rtl .me-xl-14{margin-left:56px!important}.v-application--is-ltr .me-xl-15{margin-right:60px!important}.v-application--is-rtl .me-xl-15{margin-left:60px!important}.v-application--is-ltr .me-xl-16{margin-right:64px!important}.v-application--is-rtl .me-xl-16{margin-left:64px!important}.v-application--is-ltr .me-xl-auto{margin-right:auto!important}.v-application--is-rtl .me-xl-auto{margin-left:auto!important}.v-application .ma-xl-n1{margin:-4px!important}.v-application .ma-xl-n2{margin:-8px!important}.v-application .ma-xl-n3{margin:-12px!important}.v-application .ma-xl-n4{margin:-16px!important}.v-application .ma-xl-n5{margin:-20px!important}.v-application .ma-xl-n6{margin:-24px!important}.v-application .ma-xl-n7{margin:-28px!important}.v-application .ma-xl-n8{margin:-32px!important}.v-application .ma-xl-n9{margin:-36px!important}.v-application .ma-xl-n10{margin:-40px!important}.v-application .ma-xl-n11{margin:-44px!important}.v-application .ma-xl-n12{margin:-48px!important}.v-application .ma-xl-n13{margin:-52px!important}.v-application .ma-xl-n14{margin:-56px!important}.v-application .ma-xl-n15{margin:-60px!important}.v-application .ma-xl-n16{margin:-64px!important}.v-application .mx-xl-n1{margin-right:-4px!important;margin-left:-4px!important}.v-application .mx-xl-n2{margin-right:-8px!important;margin-left:-8px!important}.v-application .mx-xl-n3{margin-right:-12px!important;margin-left:-12px!important}.v-application .mx-xl-n4{margin-right:-16px!important;margin-left:-16px!important}.v-application .mx-xl-n5{margin-right:-20px!important;margin-left:-20px!important}.v-application .mx-xl-n6{margin-right:-24px!important;margin-left:-24px!important}.v-application .mx-xl-n7{margin-right:-28px!important;margin-left:-28px!important}.v-application .mx-xl-n8{margin-right:-32px!important;margin-left:-32px!important}.v-application .mx-xl-n9{margin-right:-36px!important;margin-left:-36px!important}.v-application .mx-xl-n10{margin-right:-40px!important;margin-left:-40px!important}.v-application .mx-xl-n11{margin-right:-44px!important;margin-left:-44px!important}.v-application .mx-xl-n12{margin-right:-48px!important;margin-left:-48px!important}.v-application .mx-xl-n13{margin-right:-52px!important;margin-left:-52px!important}.v-application .mx-xl-n14{margin-right:-56px!important;margin-left:-56px!important}.v-application .mx-xl-n15{margin-right:-60px!important;margin-left:-60px!important}.v-application .mx-xl-n16{margin-right:-64px!important;margin-left:-64px!important}.v-application .my-xl-n1{margin-top:-4px!important;margin-bottom:-4px!important}.v-application .my-xl-n2{margin-top:-8px!important;margin-bottom:-8px!important}.v-application .my-xl-n3{margin-top:-12px!important;margin-bottom:-12px!important}.v-application .my-xl-n4{margin-top:-16px!important;margin-bottom:-16px!important}.v-application .my-xl-n5{margin-top:-20px!important;margin-bottom:-20px!important}.v-application .my-xl-n6{margin-top:-24px!important;margin-bottom:-24px!important}.v-application .my-xl-n7{margin-top:-28px!important;margin-bottom:-28px!important}.v-application .my-xl-n8{margin-top:-32px!important;margin-bottom:-32px!important}.v-application .my-xl-n9{margin-top:-36px!important;margin-bottom:-36px!important}.v-application .my-xl-n10{margin-top:-40px!important;margin-bottom:-40px!important}.v-application .my-xl-n11{margin-top:-44px!important;margin-bottom:-44px!important}.v-application .my-xl-n12{margin-top:-48px!important;margin-bottom:-48px!important}.v-application .my-xl-n13{margin-top:-52px!important;margin-bottom:-52px!important}.v-application .my-xl-n14{margin-top:-56px!important;margin-bottom:-56px!important}.v-application .my-xl-n15{margin-top:-60px!important;margin-bottom:-60px!important}.v-application .my-xl-n16{margin-top:-64px!important;margin-bottom:-64px!important}.v-application .mt-xl-n1{margin-top:-4px!important}.v-application .mt-xl-n2{margin-top:-8px!important}.v-application .mt-xl-n3{margin-top:-12px!important}.v-application .mt-xl-n4{margin-top:-16px!important}.v-application .mt-xl-n5{margin-top:-20px!important}.v-application .mt-xl-n6{margin-top:-24px!important}.v-application .mt-xl-n7{margin-top:-28px!important}.v-application .mt-xl-n8{margin-top:-32px!important}.v-application .mt-xl-n9{margin-top:-36px!important}.v-application .mt-xl-n10{margin-top:-40px!important}.v-application .mt-xl-n11{margin-top:-44px!important}.v-application .mt-xl-n12{margin-top:-48px!important}.v-application .mt-xl-n13{margin-top:-52px!important}.v-application .mt-xl-n14{margin-top:-56px!important}.v-application .mt-xl-n15{margin-top:-60px!important}.v-application .mt-xl-n16{margin-top:-64px!important}.v-application .mr-xl-n1{margin-right:-4px!important}.v-application .mr-xl-n2{margin-right:-8px!important}.v-application .mr-xl-n3{margin-right:-12px!important}.v-application .mr-xl-n4{margin-right:-16px!important}.v-application .mr-xl-n5{margin-right:-20px!important}.v-application .mr-xl-n6{margin-right:-24px!important}.v-application .mr-xl-n7{margin-right:-28px!important}.v-application .mr-xl-n8{margin-right:-32px!important}.v-application .mr-xl-n9{margin-right:-36px!important}.v-application .mr-xl-n10{margin-right:-40px!important}.v-application .mr-xl-n11{margin-right:-44px!important}.v-application .mr-xl-n12{margin-right:-48px!important}.v-application .mr-xl-n13{margin-right:-52px!important}.v-application .mr-xl-n14{margin-right:-56px!important}.v-application .mr-xl-n15{margin-right:-60px!important}.v-application .mr-xl-n16{margin-right:-64px!important}.v-application .mb-xl-n1{margin-bottom:-4px!important}.v-application .mb-xl-n2{margin-bottom:-8px!important}.v-application .mb-xl-n3{margin-bottom:-12px!important}.v-application .mb-xl-n4{margin-bottom:-16px!important}.v-application .mb-xl-n5{margin-bottom:-20px!important}.v-application .mb-xl-n6{margin-bottom:-24px!important}.v-application .mb-xl-n7{margin-bottom:-28px!important}.v-application .mb-xl-n8{margin-bottom:-32px!important}.v-application .mb-xl-n9{margin-bottom:-36px!important}.v-application .mb-xl-n10{margin-bottom:-40px!important}.v-application .mb-xl-n11{margin-bottom:-44px!important}.v-application .mb-xl-n12{margin-bottom:-48px!important}.v-application .mb-xl-n13{margin-bottom:-52px!important}.v-application .mb-xl-n14{margin-bottom:-56px!important}.v-application .mb-xl-n15{margin-bottom:-60px!important}.v-application .mb-xl-n16{margin-bottom:-64px!important}.v-application .ml-xl-n1{margin-left:-4px!important}.v-application .ml-xl-n2{margin-left:-8px!important}.v-application .ml-xl-n3{margin-left:-12px!important}.v-application .ml-xl-n4{margin-left:-16px!important}.v-application .ml-xl-n5{margin-left:-20px!important}.v-application .ml-xl-n6{margin-left:-24px!important}.v-application .ml-xl-n7{margin-left:-28px!important}.v-application .ml-xl-n8{margin-left:-32px!important}.v-application .ml-xl-n9{margin-left:-36px!important}.v-application .ml-xl-n10{margin-left:-40px!important}.v-application .ml-xl-n11{margin-left:-44px!important}.v-application .ml-xl-n12{margin-left:-48px!important}.v-application .ml-xl-n13{margin-left:-52px!important}.v-application .ml-xl-n14{margin-left:-56px!important}.v-application .ml-xl-n15{margin-left:-60px!important}.v-application .ml-xl-n16{margin-left:-64px!important}.v-application--is-ltr .ms-xl-n1{margin-left:-4px!important}.v-application--is-rtl .ms-xl-n1{margin-right:-4px!important}.v-application--is-ltr .ms-xl-n2{margin-left:-8px!important}.v-application--is-rtl .ms-xl-n2{margin-right:-8px!important}.v-application--is-ltr .ms-xl-n3{margin-left:-12px!important}.v-application--is-rtl .ms-xl-n3{margin-right:-12px!important}.v-application--is-ltr .ms-xl-n4{margin-left:-16px!important}.v-application--is-rtl .ms-xl-n4{margin-right:-16px!important}.v-application--is-ltr .ms-xl-n5{margin-left:-20px!important}.v-application--is-rtl .ms-xl-n5{margin-right:-20px!important}.v-application--is-ltr .ms-xl-n6{margin-left:-24px!important}.v-application--is-rtl .ms-xl-n6{margin-right:-24px!important}.v-application--is-ltr .ms-xl-n7{margin-left:-28px!important}.v-application--is-rtl .ms-xl-n7{margin-right:-28px!important}.v-application--is-ltr .ms-xl-n8{margin-left:-32px!important}.v-application--is-rtl .ms-xl-n8{margin-right:-32px!important}.v-application--is-ltr .ms-xl-n9{margin-left:-36px!important}.v-application--is-rtl .ms-xl-n9{margin-right:-36px!important}.v-application--is-ltr .ms-xl-n10{margin-left:-40px!important}.v-application--is-rtl .ms-xl-n10{margin-right:-40px!important}.v-application--is-ltr .ms-xl-n11{margin-left:-44px!important}.v-application--is-rtl .ms-xl-n11{margin-right:-44px!important}.v-application--is-ltr .ms-xl-n12{margin-left:-48px!important}.v-application--is-rtl .ms-xl-n12{margin-right:-48px!important}.v-application--is-ltr .ms-xl-n13{margin-left:-52px!important}.v-application--is-rtl .ms-xl-n13{margin-right:-52px!important}.v-application--is-ltr .ms-xl-n14{margin-left:-56px!important}.v-application--is-rtl .ms-xl-n14{margin-right:-56px!important}.v-application--is-ltr .ms-xl-n15{margin-left:-60px!important}.v-application--is-rtl .ms-xl-n15{margin-right:-60px!important}.v-application--is-ltr .ms-xl-n16{margin-left:-64px!important}.v-application--is-rtl .ms-xl-n16{margin-right:-64px!important}.v-application--is-ltr .me-xl-n1{margin-right:-4px!important}.v-application--is-rtl .me-xl-n1{margin-left:-4px!important}.v-application--is-ltr .me-xl-n2{margin-right:-8px!important}.v-application--is-rtl .me-xl-n2{margin-left:-8px!important}.v-application--is-ltr .me-xl-n3{margin-right:-12px!important}.v-application--is-rtl .me-xl-n3{margin-left:-12px!important}.v-application--is-ltr .me-xl-n4{margin-right:-16px!important}.v-application--is-rtl .me-xl-n4{margin-left:-16px!important}.v-application--is-ltr .me-xl-n5{margin-right:-20px!important}.v-application--is-rtl .me-xl-n5{margin-left:-20px!important}.v-application--is-ltr .me-xl-n6{margin-right:-24px!important}.v-application--is-rtl .me-xl-n6{margin-left:-24px!important}.v-application--is-ltr .me-xl-n7{margin-right:-28px!important}.v-application--is-rtl .me-xl-n7{margin-left:-28px!important}.v-application--is-ltr .me-xl-n8{margin-right:-32px!important}.v-application--is-rtl .me-xl-n8{margin-left:-32px!important}.v-application--is-ltr .me-xl-n9{margin-right:-36px!important}.v-application--is-rtl .me-xl-n9{margin-left:-36px!important}.v-application--is-ltr .me-xl-n10{margin-right:-40px!important}.v-application--is-rtl .me-xl-n10{margin-left:-40px!important}.v-application--is-ltr .me-xl-n11{margin-right:-44px!important}.v-application--is-rtl .me-xl-n11{margin-left:-44px!important}.v-application--is-ltr .me-xl-n12{margin-right:-48px!important}.v-application--is-rtl .me-xl-n12{margin-left:-48px!important}.v-application--is-ltr .me-xl-n13{margin-right:-52px!important}.v-application--is-rtl .me-xl-n13{margin-left:-52px!important}.v-application--is-ltr .me-xl-n14{margin-right:-56px!important}.v-application--is-rtl .me-xl-n14{margin-left:-56px!important}.v-application--is-ltr .me-xl-n15{margin-right:-60px!important}.v-application--is-rtl .me-xl-n15{margin-left:-60px!important}.v-application--is-ltr .me-xl-n16{margin-right:-64px!important}.v-application--is-rtl .me-xl-n16{margin-left:-64px!important}.v-application .pa-xl-0{padding:0!important}.v-application .pa-xl-1{padding:4px!important}.v-application .pa-xl-2{padding:8px!important}.v-application .pa-xl-3{padding:12px!important}.v-application .pa-xl-4{padding:16px!important}.v-application .pa-xl-5{padding:20px!important}.v-application .pa-xl-6{padding:24px!important}.v-application .pa-xl-7{padding:28px!important}.v-application .pa-xl-8{padding:32px!important}.v-application .pa-xl-9{padding:36px!important}.v-application .pa-xl-10{padding:40px!important}.v-application .pa-xl-11{padding:44px!important}.v-application .pa-xl-12{padding:48px!important}.v-application .pa-xl-13{padding:52px!important}.v-application .pa-xl-14{padding:56px!important}.v-application .pa-xl-15{padding:60px!important}.v-application .pa-xl-16{padding:64px!important}.v-application .px-xl-0{padding-right:0!important;padding-left:0!important}.v-application .px-xl-1{padding-right:4px!important;padding-left:4px!important}.v-application .px-xl-2{padding-right:8px!important;padding-left:8px!important}.v-application .px-xl-3{padding-right:12px!important;padding-left:12px!important}.v-application .px-xl-4{padding-right:16px!important;padding-left:16px!important}.v-application .px-xl-5{padding-right:20px!important;padding-left:20px!important}.v-application .px-xl-6{padding-right:24px!important;padding-left:24px!important}.v-application .px-xl-7{padding-right:28px!important;padding-left:28px!important}.v-application .px-xl-8{padding-right:32px!important;padding-left:32px!important}.v-application .px-xl-9{padding-right:36px!important;padding-left:36px!important}.v-application .px-xl-10{padding-right:40px!important;padding-left:40px!important}.v-application .px-xl-11{padding-right:44px!important;padding-left:44px!important}.v-application .px-xl-12{padding-right:48px!important;padding-left:48px!important}.v-application .px-xl-13{padding-right:52px!important;padding-left:52px!important}.v-application .px-xl-14{padding-right:56px!important;padding-left:56px!important}.v-application .px-xl-15{padding-right:60px!important;padding-left:60px!important}.v-application .px-xl-16{padding-right:64px!important;padding-left:64px!important}.v-application .py-xl-0{padding-top:0!important;padding-bottom:0!important}.v-application .py-xl-1{padding-top:4px!important;padding-bottom:4px!important}.v-application .py-xl-2{padding-top:8px!important;padding-bottom:8px!important}.v-application .py-xl-3{padding-top:12px!important;padding-bottom:12px!important}.v-application .py-xl-4{padding-top:16px!important;padding-bottom:16px!important}.v-application .py-xl-5{padding-top:20px!important;padding-bottom:20px!important}.v-application .py-xl-6{padding-top:24px!important;padding-bottom:24px!important}.v-application .py-xl-7{padding-top:28px!important;padding-bottom:28px!important}.v-application .py-xl-8{padding-top:32px!important;padding-bottom:32px!important}.v-application .py-xl-9{padding-top:36px!important;padding-bottom:36px!important}.v-application .py-xl-10{padding-top:40px!important;padding-bottom:40px!important}.v-application .py-xl-11{padding-top:44px!important;padding-bottom:44px!important}.v-application .py-xl-12{padding-top:48px!important;padding-bottom:48px!important}.v-application .py-xl-13{padding-top:52px!important;padding-bottom:52px!important}.v-application .py-xl-14{padding-top:56px!important;padding-bottom:56px!important}.v-application .py-xl-15{padding-top:60px!important;padding-bottom:60px!important}.v-application .py-xl-16{padding-top:64px!important;padding-bottom:64px!important}.v-application .pt-xl-0{padding-top:0!important}.v-application .pt-xl-1{padding-top:4px!important}.v-application .pt-xl-2{padding-top:8px!important}.v-application .pt-xl-3{padding-top:12px!important}.v-application .pt-xl-4{padding-top:16px!important}.v-application .pt-xl-5{padding-top:20px!important}.v-application .pt-xl-6{padding-top:24px!important}.v-application .pt-xl-7{padding-top:28px!important}.v-application .pt-xl-8{padding-top:32px!important}.v-application .pt-xl-9{padding-top:36px!important}.v-application .pt-xl-10{padding-top:40px!important}.v-application .pt-xl-11{padding-top:44px!important}.v-application .pt-xl-12{padding-top:48px!important}.v-application .pt-xl-13{padding-top:52px!important}.v-application .pt-xl-14{padding-top:56px!important}.v-application .pt-xl-15{padding-top:60px!important}.v-application .pt-xl-16{padding-top:64px!important}.v-application .pr-xl-0{padding-right:0!important}.v-application .pr-xl-1{padding-right:4px!important}.v-application .pr-xl-2{padding-right:8px!important}.v-application .pr-xl-3{padding-right:12px!important}.v-application .pr-xl-4{padding-right:16px!important}.v-application .pr-xl-5{padding-right:20px!important}.v-application .pr-xl-6{padding-right:24px!important}.v-application .pr-xl-7{padding-right:28px!important}.v-application .pr-xl-8{padding-right:32px!important}.v-application .pr-xl-9{padding-right:36px!important}.v-application .pr-xl-10{padding-right:40px!important}.v-application .pr-xl-11{padding-right:44px!important}.v-application .pr-xl-12{padding-right:48px!important}.v-application .pr-xl-13{padding-right:52px!important}.v-application .pr-xl-14{padding-right:56px!important}.v-application .pr-xl-15{padding-right:60px!important}.v-application .pr-xl-16{padding-right:64px!important}.v-application .pb-xl-0{padding-bottom:0!important}.v-application .pb-xl-1{padding-bottom:4px!important}.v-application .pb-xl-2{padding-bottom:8px!important}.v-application .pb-xl-3{padding-bottom:12px!important}.v-application .pb-xl-4{padding-bottom:16px!important}.v-application .pb-xl-5{padding-bottom:20px!important}.v-application .pb-xl-6{padding-bottom:24px!important}.v-application .pb-xl-7{padding-bottom:28px!important}.v-application .pb-xl-8{padding-bottom:32px!important}.v-application .pb-xl-9{padding-bottom:36px!important}.v-application .pb-xl-10{padding-bottom:40px!important}.v-application .pb-xl-11{padding-bottom:44px!important}.v-application .pb-xl-12{padding-bottom:48px!important}.v-application .pb-xl-13{padding-bottom:52px!important}.v-application .pb-xl-14{padding-bottom:56px!important}.v-application .pb-xl-15{padding-bottom:60px!important}.v-application .pb-xl-16{padding-bottom:64px!important}.v-application .pl-xl-0{padding-left:0!important}.v-application .pl-xl-1{padding-left:4px!important}.v-application .pl-xl-2{padding-left:8px!important}.v-application .pl-xl-3{padding-left:12px!important}.v-application .pl-xl-4{padding-left:16px!important}.v-application .pl-xl-5{padding-left:20px!important}.v-application .pl-xl-6{padding-left:24px!important}.v-application .pl-xl-7{padding-left:28px!important}.v-application .pl-xl-8{padding-left:32px!important}.v-application .pl-xl-9{padding-left:36px!important}.v-application .pl-xl-10{padding-left:40px!important}.v-application .pl-xl-11{padding-left:44px!important}.v-application .pl-xl-12{padding-left:48px!important}.v-application .pl-xl-13{padding-left:52px!important}.v-application .pl-xl-14{padding-left:56px!important}.v-application .pl-xl-15{padding-left:60px!important}.v-application .pl-xl-16{padding-left:64px!important}.v-application--is-ltr .ps-xl-0{padding-left:0!important}.v-application--is-rtl .ps-xl-0{padding-right:0!important}.v-application--is-ltr .ps-xl-1{padding-left:4px!important}.v-application--is-rtl .ps-xl-1{padding-right:4px!important}.v-application--is-ltr .ps-xl-2{padding-left:8px!important}.v-application--is-rtl .ps-xl-2{padding-right:8px!important}.v-application--is-ltr .ps-xl-3{padding-left:12px!important}.v-application--is-rtl .ps-xl-3{padding-right:12px!important}.v-application--is-ltr .ps-xl-4{padding-left:16px!important}.v-application--is-rtl .ps-xl-4{padding-right:16px!important}.v-application--is-ltr .ps-xl-5{padding-left:20px!important}.v-application--is-rtl .ps-xl-5{padding-right:20px!important}.v-application--is-ltr .ps-xl-6{padding-left:24px!important}.v-application--is-rtl .ps-xl-6{padding-right:24px!important}.v-application--is-ltr .ps-xl-7{padding-left:28px!important}.v-application--is-rtl .ps-xl-7{padding-right:28px!important}.v-application--is-ltr .ps-xl-8{padding-left:32px!important}.v-application--is-rtl .ps-xl-8{padding-right:32px!important}.v-application--is-ltr .ps-xl-9{padding-left:36px!important}.v-application--is-rtl .ps-xl-9{padding-right:36px!important}.v-application--is-ltr .ps-xl-10{padding-left:40px!important}.v-application--is-rtl .ps-xl-10{padding-right:40px!important}.v-application--is-ltr .ps-xl-11{padding-left:44px!important}.v-application--is-rtl .ps-xl-11{padding-right:44px!important}.v-application--is-ltr .ps-xl-12{padding-left:48px!important}.v-application--is-rtl .ps-xl-12{padding-right:48px!important}.v-application--is-ltr .ps-xl-13{padding-left:52px!important}.v-application--is-rtl .ps-xl-13{padding-right:52px!important}.v-application--is-ltr .ps-xl-14{padding-left:56px!important}.v-application--is-rtl .ps-xl-14{padding-right:56px!important}.v-application--is-ltr .ps-xl-15{padding-left:60px!important}.v-application--is-rtl .ps-xl-15{padding-right:60px!important}.v-application--is-ltr .ps-xl-16{padding-left:64px!important}.v-application--is-rtl .ps-xl-16{padding-right:64px!important}.v-application--is-ltr .pe-xl-0{padding-right:0!important}.v-application--is-rtl .pe-xl-0{padding-left:0!important}.v-application--is-ltr .pe-xl-1{padding-right:4px!important}.v-application--is-rtl .pe-xl-1{padding-left:4px!important}.v-application--is-ltr .pe-xl-2{padding-right:8px!important}.v-application--is-rtl .pe-xl-2{padding-left:8px!important}.v-application--is-ltr .pe-xl-3{padding-right:12px!important}.v-application--is-rtl .pe-xl-3{padding-left:12px!important}.v-application--is-ltr .pe-xl-4{padding-right:16px!important}.v-application--is-rtl .pe-xl-4{padding-left:16px!important}.v-application--is-ltr .pe-xl-5{padding-right:20px!important}.v-application--is-rtl .pe-xl-5{padding-left:20px!important}.v-application--is-ltr .pe-xl-6{padding-right:24px!important}.v-application--is-rtl .pe-xl-6{padding-left:24px!important}.v-application--is-ltr .pe-xl-7{padding-right:28px!important}.v-application--is-rtl .pe-xl-7{padding-left:28px!important}.v-application--is-ltr .pe-xl-8{padding-right:32px!important}.v-application--is-rtl .pe-xl-8{padding-left:32px!important}.v-application--is-ltr .pe-xl-9{padding-right:36px!important}.v-application--is-rtl .pe-xl-9{padding-left:36px!important}.v-application--is-ltr .pe-xl-10{padding-right:40px!important}.v-application--is-rtl .pe-xl-10{padding-left:40px!important}.v-application--is-ltr .pe-xl-11{padding-right:44px!important}.v-application--is-rtl .pe-xl-11{padding-left:44px!important}.v-application--is-ltr .pe-xl-12{padding-right:48px!important}.v-application--is-rtl .pe-xl-12{padding-left:48px!important}.v-application--is-ltr .pe-xl-13{padding-right:52px!important}.v-application--is-rtl .pe-xl-13{padding-left:52px!important}.v-application--is-ltr .pe-xl-14{padding-right:56px!important}.v-application--is-rtl .pe-xl-14{padding-left:56px!important}.v-application--is-ltr .pe-xl-15{padding-right:60px!important}.v-application--is-rtl .pe-xl-15{padding-left:60px!important}.v-application--is-ltr .pe-xl-16{padding-right:64px!important}.v-application--is-rtl .pe-xl-16{padding-left:64px!important}.v-application .text-xl-left{text-align:left!important}.v-application .text-xl-right{text-align:right!important}.v-application .text-xl-center{text-align:center!important}.v-application .text-xl-justify{text-align:justify!important}.v-application .text-xl-start{text-align:start!important}.v-application .text-xl-end{text-align:end!important}.v-application .text-xl-h1{font-size:6rem!important;line-height:6rem;letter-spacing:-.015625em!important}.v-application .text-xl-h1,.v-application .text-xl-h2{font-weight:300;font-family:Roboto,sans-serif!important}.v-application .text-xl-h2{font-size:3.75rem!important;line-height:3.75rem;letter-spacing:-.0083333333em!important}.v-application .text-xl-h3{font-size:3rem!important;line-height:3.125rem;letter-spacing:normal!important}.v-application .text-xl-h3,.v-application .text-xl-h4{font-weight:400;font-family:Roboto,sans-serif!important}.v-application .text-xl-h4{font-size:2.125rem!important;line-height:2.5rem;letter-spacing:.0073529412em!important}.v-application .text-xl-h5{font-size:1.5rem!important;font-weight:400;letter-spacing:normal!important}.v-application .text-xl-h5,.v-application .text-xl-h6{line-height:2rem;font-family:Roboto,sans-serif!important}.v-application .text-xl-h6{font-size:1.25rem!important;font-weight:500;letter-spacing:.0125em!important}.v-application .text-xl-subtitle-1{font-size:1rem!important;font-weight:400;line-height:1.75rem;letter-spacing:.009375em!important;font-family:Roboto,sans-serif!important}.v-application .text-xl-subtitle-2{font-size:.875rem!important;font-weight:500;line-height:1.375rem;letter-spacing:.0071428571em!important;font-family:Roboto,sans-serif!important}.v-application .text-xl-body-1{font-size:1rem!important;font-weight:400;line-height:1.5rem;letter-spacing:.03125em!important;font-family:Roboto,sans-serif!important}.v-application .text-xl-body-2{font-weight:400;line-height:1.25rem;letter-spacing:.0178571429em!important}.v-application .text-xl-body-2,.v-application .text-xl-button{font-size:.875rem!important;font-family:Roboto,sans-serif!important}.v-application .text-xl-button{font-weight:500;line-height:2.25rem;letter-spacing:.0892857143em!important;text-transform:uppercase!important}.v-application .text-xl-caption{font-weight:400;line-height:1.25rem;letter-spacing:.0333333333em!important}.v-application .text-xl-caption,.v-application .text-xl-overline{font-size:.75rem!important;font-family:Roboto,sans-serif!important}.v-application .text-xl-overline{font-weight:500;line-height:2rem;letter-spacing:.1666666667em!important;text-transform:uppercase!important}}@media print{.v-application .d-print-none{display:none!important}.v-application .d-print-inline{display:inline!important}.v-application .d-print-inline-block{display:inline-block!important}.v-application .d-print-block{display:block!important}.v-application .d-print-table{display:table!important}.v-application .d-print-table-row{display:table-row!important}.v-application .d-print-table-cell{display:table-cell!important}.v-application .d-print-flex{display:flex!important}.v-application .d-print-inline-flex{display:inline-flex!important}.v-application .float-print-none{float:none!important}.v-application .float-print-left{float:left!important}.v-application .float-print-right{float:right!important}.v-application--is-rtl .float-print-end{float:left!important}.v-application--is-ltr .float-print-end,.v-application--is-rtl .float-print-start{float:right!important}.v-application--is-ltr .float-print-start{float:left!important}}.v-ripple__container{border-radius:inherit;width:100%;height:100%;z-index:0;contain:strict}.v-ripple__animation,.v-ripple__container{color:inherit;position:absolute;left:0;top:0;overflow:hidden;pointer-events:none}.v-ripple__animation{border-radius:50%;background:currentColor;opacity:0;will-change:transform,opacity}.v-ripple__animation--enter{transition:none}.v-ripple__animation--in{transition:transform .25s cubic-bezier(.4,0,.2,1),opacity .1s cubic-bezier(.4,0,.2,1)}.v-ripple__animation--out{transition:opacity .3s cubic-bezier(.4,0,.2,1)}.v-progress-circular{position:relative;display:inline-flex;vertical-align:middle;justify-content:center;align-items:center}.v-progress-circular>svg{width:100%;height:100%;margin:auto;position:absolute;top:0;bottom:0;left:0;right:0;z-index:0}.v-progress-circular--indeterminate>svg{animation:progress-circular-rotate 1.4s linear infinite;transform-origin:center center;transition:all .2s ease-in-out}.v-progress-circular--indeterminate .v-progress-circular__overlay{animation:progress-circular-dash 1.4s ease-in-out infinite;stroke-linecap:round;stroke-dasharray:80,200;stroke-dashoffset:0px}.v-progress-circular--indeterminate:not(.v-progress-circular--visible) .v-progress-circular__overlay,.v-progress-circular--indeterminate:not(.v-progress-circular--visible)>svg{animation-play-state:paused!important}.v-progress-circular__info{align-items:center;display:flex;justify-content:center}.v-progress-circular__underlay{stroke:hsla(0,0%,62%,.4);z-index:1}.v-progress-circular__overlay{stroke:currentColor;z-index:2;transition:all .6s ease-in-out}@keyframes progress-circular-dash{0%{stroke-dasharray:1,200;stroke-dashoffset:0px}50%{stroke-dasharray:100,200;stroke-dashoffset:-15px}to{stroke-dasharray:100,200;stroke-dashoffset:-124px}}@keyframes progress-circular-rotate{to{transform:rotate(1turn)}}.theme--light.v-card{background-color:#fff;color:rgba(0,0,0,.87)}.theme--light.v-card>.v-card__subtitle,.theme--light.v-card>.v-card__text{color:rgba(0,0,0,.6)}.theme--dark.v-card{background-color:#1e1e1e;color:#fff}.theme--dark.v-card>.v-card__subtitle,.theme--dark.v-card>.v-card__text{color:hsla(0,0%,100%,.7)}.v-sheet.v-card{border-radius:4px}.v-sheet.v-card:not(.v-sheet--outlined){box-shadow:0 3px 1px -2px rgba(0,0,0,.2),0 2px 2px 0 rgba(0,0,0,.14),0 1px 5px 0 rgba(0,0,0,.12)}.v-sheet.v-card.v-sheet--shaped{border-radius:24px 4px}.v-card{border-width:thin;display:block;max-width:100%;outline:none;text-decoration:none;transition-property:box-shadow,opacity;overflow-wrap:break-word;position:relative;white-space:normal}.v-card>.v-card__progress+:not(.v-btn):not(.v-chip):not(.v-avatar),.v-card>:first-child:not(.v-btn):not(.v-chip):not(.v-avatar){border-top-left-radius:inherit;border-top-right-radius:inherit}.v-card>:last-child:not(.v-btn):not(.v-chip):not(.v-avatar){border-bottom-left-radius:inherit;border-bottom-right-radius:inherit}.v-card__progress{top:0;left:0;right:0;overflow:hidden}.v-card__subtitle+.v-card__text{padding-top:0}.v-card__subtitle,.v-card__text{font-size:.875rem;font-weight:400;line-height:1.375rem;letter-spacing:.0071428571em}.v-card__subtitle,.v-card__text,.v-card__title{padding:16px}.v-card__title{align-items:center;display:flex;flex-wrap:wrap;font-size:1.25rem;font-weight:500;letter-spacing:.0125em;line-height:2rem;word-break:break-all}.v-card__title+.v-card__subtitle,.v-card__title+.v-card__text{padding-top:0}.v-card__title+.v-card__subtitle{margin-top:-16px}.v-card__text{width:100%}.v-card__actions{align-items:center;display:flex;padding:8px}.v-card__actions>.v-btn.v-btn{padding:0 8px}.v-application--is-ltr .v-card__actions>.v-btn.v-btn+.v-btn{margin-left:8px}.v-application--is-ltr .v-card__actions>.v-btn.v-btn .v-icon--left{margin-left:4px}.v-application--is-ltr .v-card__actions>.v-btn.v-btn .v-icon--right{margin-right:4px}.v-application--is-rtl .v-card__actions>.v-btn.v-btn+.v-btn{margin-right:8px}.v-application--is-rtl .v-card__actions>.v-btn.v-btn .v-icon--left{margin-right:4px}.v-application--is-rtl .v-card__actions>.v-btn.v-btn .v-icon--right{margin-left:4px}.v-card--flat{box-shadow:0 0 0 0 rgba(0,0,0,.2),0 0 0 0 rgba(0,0,0,.14),0 0 0 0 rgba(0,0,0,.12)!important}.v-sheet.v-card--hover{cursor:pointer;transition:box-shadow .4s cubic-bezier(.25,.8,.25,1)}.v-sheet.v-card--hover:focus,.v-sheet.v-card--hover:hover{box-shadow:0 5px 5px -3px rgba(0,0,0,.2),0 8px 10px 1px rgba(0,0,0,.14),0 3px 14px 2px rgba(0,0,0,.12)}.v-card--link,.v-card--link .v-chip{cursor:pointer}.v-card--link:focus:before{opacity:.08}.v-card--link:before{background:currentColor;bottom:0;content:"";left:0;opacity:0;pointer-events:none;position:absolute;right:0;top:0;transition:opacity .2s}.v-card--disabled{pointer-events:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.v-card--disabled>:not(.v-card__progress){opacity:.6;transition:inherit}.v-card--loading{overflow:hidden}.v-card--raised{box-shadow:0 5px 5px -3px rgba(0,0,0,.2),0 8px 10px 1px rgba(0,0,0,.14),0 3px 14px 2px rgba(0,0,0,.12)}.theme--light.v-progress-linear{color:rgba(0,0,0,.87)}.theme--dark.v-progress-linear{color:#fff}.v-progress-linear{background:transparent;overflow:hidden;position:relative;transition:.2s cubic-bezier(.4,0,.6,1);width:100%}.v-progress-linear__buffer{height:inherit;left:0;position:absolute;top:0;transition:inherit;width:100%}.v-progress-linear--reverse .v-progress-linear__buffer{left:auto;right:0}.v-progress-linear__background{bottom:0;left:0;position:absolute;top:0;transition:inherit}.v-progress-linear--reverse .v-progress-linear__background{left:auto;right:0}.v-progress-linear__content{align-items:center;display:flex;height:100%;left:0;justify-content:center;position:absolute;top:0;width:100%}.v-progress-linear--reverse .v-progress-linear__content{left:auto;right:0}.v-progress-linear__determinate{height:inherit;left:0;position:absolute;transition:inherit}.v-progress-linear--reverse .v-progress-linear__determinate{left:auto;right:0}.v-progress-linear .v-progress-linear__indeterminate .long,.v-progress-linear .v-progress-linear__indeterminate .short{animation-play-state:paused;background-color:inherit;bottom:0;height:inherit;left:0;position:absolute;right:auto;top:0;width:auto;will-change:left,right}.v-progress-linear .v-progress-linear__indeterminate--active .long{animation-name:indeterminate-ltr;animation-duration:2.2s;animation-iteration-count:infinite}.v-progress-linear .v-progress-linear__indeterminate--active .short{animation-name:indeterminate-short-ltr;animation-duration:2.2s;animation-iteration-count:infinite}.v-progress-linear--reverse .v-progress-linear__indeterminate .long,.v-progress-linear--reverse .v-progress-linear__indeterminate .short{left:auto;right:0}.v-progress-linear--reverse .v-progress-linear__indeterminate--active .long{animation-name:indeterminate-rtl}.v-progress-linear--reverse .v-progress-linear__indeterminate--active .short{animation-name:indeterminate-short-rtl}.v-progress-linear__stream{animation:stream-ltr .25s linear infinite;animation-play-state:paused;border-color:currentColor;border-top:4px dotted;bottom:0;left:auto;right:-8px;opacity:.3;pointer-events:none;position:absolute;top:calc(50% - 2px);transition:inherit}.v-progress-linear--reverse .v-progress-linear__stream{animation:stream-rtl .25s linear infinite;left:-8px;right:auto}.v-progress-linear__wrapper{overflow:hidden;position:relative;transition:inherit}.v-progress-linear--absolute,.v-progress-linear--fixed{left:0;z-index:1}.v-progress-linear--absolute{position:absolute}.v-progress-linear--fixed{position:fixed}.v-progress-linear--reactive .v-progress-linear__content{pointer-events:none}.v-progress-linear--rounded{border-radius:4px}.v-progress-linear--striped .v-progress-linear__determinate{background-image:linear-gradient(135deg,hsla(0,0%,100%,.25) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.25) 0,hsla(0,0%,100%,.25) 75%,transparent 0,transparent);background-size:40px 40px;background-repeat:repeat}.v-progress-linear--query .v-progress-linear__indeterminate--active .long{animation-name:query-ltr;animation-duration:2s;animation-iteration-count:infinite}.v-progress-linear--query .v-progress-linear__indeterminate--active .short{animation-name:query-short-ltr;animation-duration:2s;animation-iteration-count:infinite}.v-progress-linear--query.v-progress-linear--reverse .v-progress-linear__indeterminate--active .long{animation-name:query-rtl}.v-progress-linear--query.v-progress-linear--reverse .v-progress-linear__indeterminate--active .short{animation-name:query-short-rtl}.v-progress-linear--visible .v-progress-linear__indeterminate--active .long,.v-progress-linear--visible .v-progress-linear__indeterminate--active .short,.v-progress-linear--visible .v-progress-linear__stream{animation-play-state:running}@keyframes indeterminate-ltr{0%{left:-90%;right:100%}60%{left:-90%;right:100%}to{left:100%;right:-35%}}@keyframes indeterminate-rtl{0%{left:100%;right:-90%}60%{left:100%;right:-90%}to{left:-35%;right:100%}}@keyframes indeterminate-short-ltr{0%{left:-200%;right:100%}60%{left:107%;right:-8%}to{left:107%;right:-8%}}@keyframes indeterminate-short-rtl{0%{left:100%;right:-200%}60%{left:-8%;right:107%}to{left:-8%;right:107%}}@keyframes query-ltr{0%{right:-90%;left:100%}60%{right:-90%;left:100%}to{right:100%;left:-35%}}@keyframes query-rtl{0%{right:100%;left:-90%}60%{right:100%;left:-90%}to{right:-35%;left:100%}}@keyframes query-short-ltr{0%{right:-200%;left:100%}60%{right:107%;left:-8%}to{right:107%;left:-8%}}@keyframes query-short-rtl{0%{right:100%;left:-200%}60%{right:-8%;left:107%}to{right:-8%;left:107%}}@keyframes stream-ltr{to{transform:translateX(-8px)}}@keyframes stream-rtl{to{transform:translateX(8px)}}.theme--light.v-input--selection-controls.v-input--is-disabled:not(.v-input--indeterminate) .v-icon{color:rgba(0,0,0,.26)!important}.theme--dark.v-input--selection-controls.v-input--is-disabled:not(.v-input--indeterminate) .v-icon{color:hsla(0,0%,100%,.3)!important}.v-input--selection-controls{margin-top:16px;padding-top:4px}.v-input--selection-controls>.v-input__append-outer,.v-input--selection-controls>.v-input__prepend-outer{margin-top:0;margin-bottom:0}.v-input--selection-controls:not(.v-input--hide-details)>.v-input__slot{margin-bottom:12px}.v-input--selection-controls .v-input__slot,.v-input--selection-controls .v-radio{cursor:pointer}.v-input--selection-controls .v-input__slot>.v-label,.v-input--selection-controls .v-radio>.v-label{align-items:center;display:inline-flex;flex:1 1 auto;height:auto}.v-input--selection-controls__input{color:inherit;display:inline-flex;flex:0 0 auto;height:24px;position:relative;transition:.3s cubic-bezier(.25,.8,.5,1);transition-property:transform;width:24px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.v-input--selection-controls__input .v-icon{width:100%}.v-application--is-ltr .v-input--selection-controls__input{margin-right:8px}.v-application--is-rtl .v-input--selection-controls__input{margin-left:8px}.v-input--selection-controls__input input[role=checkbox],.v-input--selection-controls__input input[role=radio],.v-input--selection-controls__input input[role=switch]{position:absolute;opacity:0;width:100%;height:100%;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.v-input--selection-controls__input+.v-label{cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.v-input--selection-controls__ripple{border-radius:50%;cursor:pointer;height:34px;position:absolute;transition:inherit;width:34px;left:-12px;top:calc(50% - 24px);margin:7px}.v-input--selection-controls__ripple:before{border-radius:inherit;bottom:0;content:"";position:absolute;opacity:.2;left:0;right:0;top:0;transform-origin:center center;transform:scale(.2);transition:inherit}.v-input--selection-controls__ripple>.v-ripple__container{transform:scale(1.2)}.v-input--selection-controls.v-input--dense .v-input--selection-controls__ripple{width:28px;height:28px;left:-9px}.v-input--selection-controls.v-input--dense:not(.v-input--switch) .v-input--selection-controls__ripple{top:calc(50% - 21px)}.v-input--selection-controls.v-input{flex:0 1 auto}.v-input--selection-controls.v-input--is-focused .v-input--selection-controls__ripple:before,.v-input--selection-controls .v-radio--is-focused .v-input--selection-controls__ripple:before{background:currentColor;transform:scale(1.2)}.v-input--selection-controls__input:hover .v-input--selection-controls__ripple:before{background:currentColor;transform:scale(1.2);transition:none}.theme--light.v-input--switch .v-input--switch__thumb{color:#fff}.theme--light.v-input--switch .v-input--switch__track{color:rgba(0,0,0,.38)}.theme--light.v-input--switch.v-input--is-disabled:not(.v-input--is-dirty) .v-input--switch__thumb{color:#fafafa!important}.theme--light.v-input--switch.v-input--is-disabled:not(.v-input--is-dirty) .v-input--switch__track{color:rgba(0,0,0,.12)!important}.theme--dark.v-input--switch .v-input--switch__thumb{color:#bdbdbd}.theme--dark.v-input--switch .v-input--switch__track{color:hsla(0,0%,100%,.3)}.theme--dark.v-input--switch.v-input--is-disabled:not(.v-input--is-dirty) .v-input--switch__thumb{color:#424242!important}.theme--dark.v-input--switch.v-input--is-disabled:not(.v-input--is-dirty) .v-input--switch__track{color:hsla(0,0%,100%,.1)!important}.v-input--switch__thumb,.v-input--switch__track{background-color:currentColor;pointer-events:none;transition:inherit}.v-input--switch__track{border-radius:8px;width:36px;height:14px;left:2px;position:absolute;opacity:.6;right:2px;top:calc(50% - 7px)}.v-input--switch__thumb{border-radius:50%;top:calc(50% - 10px);height:20px;position:relative;width:20px;display:flex;justify-content:center;align-items:center;transition:.3s cubic-bezier(.25,.8,.5,1)}.v-input--switch .v-input--selection-controls__input{width:38px}.v-input--switch .v-input--selection-controls__ripple{top:calc(50% - 24px)}.v-input--switch.v-input--dense .v-input--switch__thumb{width:18px;height:18px}.v-input--switch.v-input--dense .v-input--switch__track{height:12px;width:32px}.v-input--switch.v-input--dense.v-input--switch--inset .v-input--switch__track{height:22px;width:44px;top:calc(50% - 12px);left:-3px}.v-input--switch.v-input--dense .v-input--selection-controls__ripple{top:calc(50% - 22px)}.v-input--switch.v-input--is-dirty.v-input--is-disabled{opacity:.6}.v-application--is-ltr .v-input--switch .v-input--selection-controls__ripple{left:-14px}.v-application--is-ltr .v-input--switch.v-input--dense .v-input--selection-controls__ripple{left:-12px}.v-application--is-ltr .v-input--switch.v-input--is-dirty .v-input--selection-controls__ripple,.v-application--is-ltr .v-input--switch.v-input--is-dirty .v-input--switch__thumb{transform:translate(20px)}.v-application--is-rtl .v-input--switch .v-input--selection-controls__ripple{right:-14px}.v-application--is-rtl .v-input--switch.v-input--dense .v-input--selection-controls__ripple{right:-12px}.v-application--is-rtl .v-input--switch.v-input--is-dirty .v-input--selection-controls__ripple,.v-application--is-rtl .v-input--switch.v-input--is-dirty .v-input--switch__thumb{transform:translate(-20px)}.v-input--switch:not(.v-input--switch--flat):not(.v-input--switch--inset) .v-input--switch__thumb{box-shadow:0 2px 4px -1px rgba(0,0,0,.2),0 4px 5px 0 rgba(0,0,0,.14),0 1px 10px 0 rgba(0,0,0,.12)}.v-input--switch--inset .v-input--selection-controls__input,.v-input--switch--inset .v-input--switch__track{width:48px}.v-input--switch--inset .v-input--switch__track{border-radius:14px;height:28px;left:-4px;opacity:.32;top:calc(50% - 14px)}.v-application--is-ltr .v-input--switch--inset .v-input--selection-controls__ripple,.v-application--is-ltr .v-input--switch--inset .v-input--switch__thumb{transform:translate(0)!important}.v-application--is-rtl .v-input--switch--inset .v-input--selection-controls__ripple,.v-application--is-rtl .v-input--switch--inset .v-input--switch__thumb{transform:translate(-6px)!important}.v-application--is-ltr .v-input--switch--inset.v-input--is-dirty .v-input--selection-controls__ripple,.v-application--is-ltr .v-input--switch--inset.v-input--is-dirty .v-input--switch__thumb{transform:translate(20px)!important}.v-application--is-rtl .v-input--switch--inset.v-input--is-dirty .v-input--selection-controls__ripple,.v-application--is-rtl .v-input--switch--inset.v-input--is-dirty .v-input--switch__thumb{transform:translate(-26px)!important}.theme--light.v-input,.theme--light.v-input input,.theme--light.v-input textarea{color:rgba(0,0,0,.87)}.theme--light.v-input input::-moz-placeholder,.theme--light.v-input textarea::-moz-placeholder{color:rgba(0,0,0,.38)}.theme--light.v-input input:-ms-input-placeholder,.theme--light.v-input textarea:-ms-input-placeholder{color:rgba(0,0,0,.38)}.theme--light.v-input input::placeholder,.theme--light.v-input textarea::placeholder{color:rgba(0,0,0,.38)}.theme--light.v-input--is-disabled,.theme--light.v-input--is-disabled input,.theme--light.v-input--is-disabled textarea{color:rgba(0,0,0,.38)}.theme--dark.v-input,.theme--dark.v-input input,.theme--dark.v-input textarea{color:#fff}.theme--dark.v-input input::-moz-placeholder,.theme--dark.v-input textarea::-moz-placeholder{color:hsla(0,0%,100%,.5)}.theme--dark.v-input input:-ms-input-placeholder,.theme--dark.v-input textarea:-ms-input-placeholder{color:hsla(0,0%,100%,.5)}.theme--dark.v-input input::placeholder,.theme--dark.v-input textarea::placeholder{color:hsla(0,0%,100%,.5)}.theme--dark.v-input--is-disabled,.theme--dark.v-input--is-disabled input,.theme--dark.v-input--is-disabled textarea{color:hsla(0,0%,100%,.5)}.v-input{align-items:flex-start;display:flex;flex:1 1 auto;font-size:16px;letter-spacing:normal;max-width:100%;text-align:left}.v-input .v-progress-linear{top:calc(100% - 1px);left:0}.v-input input{max-height:32px}.v-input input:invalid,.v-input textarea:invalid{box-shadow:none}.v-input input:active,.v-input input:focus,.v-input textarea:active,.v-input textarea:focus{outline:none}.v-input .v-label{height:20px;line-height:20px;letter-spacing:normal}.v-input__append-outer,.v-input__prepend-outer{display:inline-flex;margin-bottom:4px;margin-top:4px;line-height:1}.v-input__append-outer .v-icon,.v-input__prepend-outer .v-icon{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.v-application--is-ltr .v-input__append-outer{margin-left:9px}.v-application--is-ltr .v-input__prepend-outer,.v-application--is-rtl .v-input__append-outer{margin-right:9px}.v-application--is-rtl .v-input__prepend-outer{margin-left:9px}.v-input__control{display:flex;flex-direction:column;height:auto;flex-grow:1;flex-wrap:wrap;min-width:0;width:100%}.v-input__icon{align-items:center;display:inline-flex;height:24px;flex:1 0 auto;justify-content:center;min-width:24px;width:24px}.v-input__icon--clear{border-radius:50%}.v-input__icon--clear .v-icon--disabled{visibility:hidden}.v-input__slot{align-items:center;color:inherit;display:flex;margin-bottom:8px;min-height:inherit;position:relative;transition:.3s cubic-bezier(.25,.8,.5,1);width:100%}.v-input--dense>.v-input__control>.v-input__slot{margin-bottom:4px}.v-input--is-disabled:not(.v-input--is-readonly){pointer-events:none}.v-input--is-loading>.v-input__control>.v-input__slot:after,.v-input--is-loading>.v-input__control>.v-input__slot:before{display:none}.v-input--hide-details>.v-input__control>.v-input__slot{margin-bottom:0}.v-input--has-state.error--text .v-label{animation:v-shake .6s cubic-bezier(.25,.8,.5,1)}.theme--light.v-icon{color:rgba(0,0,0,.54)}.theme--light.v-icon:focus:after{opacity:.12}.theme--light.v-icon.v-icon.v-icon--disabled{color:rgba(0,0,0,.38)!important}.theme--dark.v-icon{color:#fff}.theme--dark.v-icon:focus:after{opacity:.24}.theme--dark.v-icon.v-icon.v-icon--disabled{color:hsla(0,0%,100%,.5)!important}.v-icon.v-icon{align-items:center;display:inline-flex;font-feature-settings:"liga";font-size:24px;justify-content:center;letter-spacing:normal;line-height:1;position:relative;text-indent:0;transition:.3s cubic-bezier(.25,.8,.5,1),visibility 0s;vertical-align:middle;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.v-icon.v-icon:after{background-color:currentColor;border-radius:50%;content:"";display:inline-block;height:100%;left:0;opacity:0;pointer-events:none;position:absolute;top:0;transform:scale(1.3);width:100%;transition:opacity .2s cubic-bezier(.4,0,.6,1)}.v-icon.v-icon--dense{font-size:20px}.v-icon--right{margin-left:8px}.v-icon--left{margin-right:8px}.v-icon.v-icon.v-icon--link{cursor:pointer;outline:none}.v-icon--disabled{pointer-events:none}.v-icon--dense__component,.v-icon--dense__svg{height:20px}.v-icon__component,.v-icon__svg{height:24px;width:24px}.v-icon__svg{fill:currentColor}.theme--light.v-label{color:rgba(0,0,0,.6)}.theme--light.v-label--is-disabled{color:rgba(0,0,0,.38)}.theme--dark.v-label{color:hsla(0,0%,100%,.7)}.theme--dark.v-label--is-disabled{color:hsla(0,0%,100%,.5)}.v-label{font-size:16px;line-height:1;min-height:8px;transition:.3s cubic-bezier(.25,.8,.5,1)}.theme--light.v-messages{color:rgba(0,0,0,.6)}.theme--dark.v-messages{color:hsla(0,0%,100%,.7)}.v-messages{flex:1 1 auto;font-size:12px;min-height:14px;min-width:1px;position:relative}.v-application--is-ltr .v-messages{text-align:left}.v-application--is-rtl .v-messages{text-align:right}.v-messages__message{line-height:12px;word-break:break-word;overflow-wrap:break-word;word-wrap:break-word;-webkit-hyphens:auto;-ms-hyphens:auto;hyphens:auto}.v-tooltip{display:none}.v-tooltip--attached{display:inline}.v-tooltip__content{background:rgba(97,97,97,.9);color:#fff;border-radius:4px;font-size:14px;line-height:22px;display:inline-block;padding:5px 16px;position:absolute;text-transform:none;width:auto;opacity:1;pointer-events:none}.v-tooltip__content--fixed{position:fixed}.v-tooltip__content[class*=-active]{transition-timing-function:cubic-bezier(0,0,.2,1)}.v-tooltip__content[class*=enter-active]{transition-duration:.15s}.v-tooltip__content[class*=leave-active]{transition-duration:75ms}@font-face{font-family:Material Design Icons;src:url(../fonts/materialdesignicons-webfont.64d4cf64.eot);src:url(../fonts/materialdesignicons-webfont.64d4cf64.eot?#iefix&v=5.9.55) format("embedded-opentype"),url(../fonts/materialdesignicons-webfont.7a44ea19.woff2) format("woff2"),url(../fonts/materialdesignicons-webfont.147e3378.woff) format("woff"),url(../fonts/materialdesignicons-webfont.174c02fc.ttf) format("truetype");font-weight:400;font-style:normal}.mdi-set,.mdi:before{display:inline-block;font:normal normal normal 24px/1 Material Design Icons;font-size:inherit;text-rendering:auto;line-height:inherit;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.mdi-ab-testing:before{content:"\F01C9"}.mdi-abacus:before{content:"\F16E0"}.mdi-abjad-arabic:before{content:"\F1328"}.mdi-abjad-hebrew:before{content:"\F1329"}.mdi-abugida-devanagari:before{content:"\F132A"}.mdi-abugida-thai:before{content:"\F132B"}.mdi-access-point:before{content:"\F0003"}.mdi-access-point-check:before{content:"\F1538"}.mdi-access-point-minus:before{content:"\F1539"}.mdi-access-point-network:before{content:"\F0002"}.mdi-access-point-network-off:before{content:"\F0BE1"}.mdi-access-point-off:before{content:"\F1511"}.mdi-access-point-plus:before{content:"\F153A"}.mdi-access-point-remove:before{content:"\F153B"}.mdi-account:before{content:"\F0004"}.mdi-account-alert:before{content:"\F0005"}.mdi-account-alert-outline:before{content:"\F0B50"}.mdi-account-arrow-left:before{content:"\F0B51"}.mdi-account-arrow-left-outline:before{content:"\F0B52"}.mdi-account-arrow-right:before{content:"\F0B53"}.mdi-account-arrow-right-outline:before{content:"\F0B54"}.mdi-account-box:before{content:"\F0006"}.mdi-account-box-multiple:before{content:"\F0934"}.mdi-account-box-multiple-outline:before{content:"\F100A"}.mdi-account-box-outline:before{content:"\F0007"}.mdi-account-cancel:before{content:"\F12DF"}.mdi-account-cancel-outline:before{content:"\F12E0"}.mdi-account-cash:before{content:"\F1097"}.mdi-account-cash-outline:before{content:"\F1098"}.mdi-account-check:before{content:"\F0008"}.mdi-account-check-outline:before{content:"\F0BE2"}.mdi-account-child:before{content:"\F0A89"}.mdi-account-child-circle:before{content:"\F0A8A"}.mdi-account-child-outline:before{content:"\F10C8"}.mdi-account-circle:before{content:"\F0009"}.mdi-account-circle-outline:before{content:"\F0B55"}.mdi-account-clock:before{content:"\F0B56"}.mdi-account-clock-outline:before{content:"\F0B57"}.mdi-account-cog:before{content:"\F1370"}.mdi-account-cog-outline:before{content:"\F1371"}.mdi-account-convert:before{content:"\F000A"}.mdi-account-convert-outline:before{content:"\F1301"}.mdi-account-cowboy-hat:before{content:"\F0E9B"}.mdi-account-details:before{content:"\F0631"}.mdi-account-details-outline:before{content:"\F1372"}.mdi-account-edit:before{content:"\F06BC"}.mdi-account-edit-outline:before{content:"\F0FFB"}.mdi-account-group:before{content:"\F0849"}.mdi-account-group-outline:before{content:"\F0B58"}.mdi-account-hard-hat:before{content:"\F05B5"}.mdi-account-heart:before{content:"\F0899"}.mdi-account-heart-outline:before{content:"\F0BE3"}.mdi-account-key:before{content:"\F000B"}.mdi-account-key-outline:before{content:"\F0BE4"}.mdi-account-lock:before{content:"\F115E"}.mdi-account-lock-outline:before{content:"\F115F"}.mdi-account-minus:before{content:"\F000D"}.mdi-account-minus-outline:before{content:"\F0AEC"}.mdi-account-multiple:before{content:"\F000E"}.mdi-account-multiple-check:before{content:"\F08C5"}.mdi-account-multiple-check-outline:before{content:"\F11FE"}.mdi-account-multiple-minus:before{content:"\F05D3"}.mdi-account-multiple-minus-outline:before{content:"\F0BE5"}.mdi-account-multiple-outline:before{content:"\F000F"}.mdi-account-multiple-plus:before{content:"\F0010"}.mdi-account-multiple-plus-outline:before{content:"\F0800"}.mdi-account-multiple-remove:before{content:"\F120A"}.mdi-account-multiple-remove-outline:before{content:"\F120B"}.mdi-account-music:before{content:"\F0803"}.mdi-account-music-outline:before{content:"\F0CE9"}.mdi-account-network:before{content:"\F0011"}.mdi-account-network-outline:before{content:"\F0BE6"}.mdi-account-off:before{content:"\F0012"}.mdi-account-off-outline:before{content:"\F0BE7"}.mdi-account-outline:before{content:"\F0013"}.mdi-account-plus:before{content:"\F0014"}.mdi-account-plus-outline:before{content:"\F0801"}.mdi-account-question:before{content:"\F0B59"}.mdi-account-question-outline:before{content:"\F0B5A"}.mdi-account-reactivate:before{content:"\F152B"}.mdi-account-reactivate-outline:before{content:"\F152C"}.mdi-account-remove:before{content:"\F0015"}.mdi-account-remove-outline:before{content:"\F0AED"}.mdi-account-search:before{content:"\F0016"}.mdi-account-search-outline:before{content:"\F0935"}.mdi-account-settings:before{content:"\F0630"}.mdi-account-settings-outline:before{content:"\F10C9"}.mdi-account-star:before{content:"\F0017"}.mdi-account-star-outline:before{content:"\F0BE8"}.mdi-account-supervisor:before{content:"\F0A8B"}.mdi-account-supervisor-circle:before{content:"\F0A8C"}.mdi-account-supervisor-circle-outline:before{content:"\F14EC"}.mdi-account-supervisor-outline:before{content:"\F112D"}.mdi-account-switch:before{content:"\F0019"}.mdi-account-switch-outline:before{content:"\F04CB"}.mdi-account-tie:before{content:"\F0CE3"}.mdi-account-tie-outline:before{content:"\F10CA"}.mdi-account-tie-voice:before{content:"\F1308"}.mdi-account-tie-voice-off:before{content:"\F130A"}.mdi-account-tie-voice-off-outline:before{content:"\F130B"}.mdi-account-tie-voice-outline:before{content:"\F1309"}.mdi-account-voice:before{content:"\F05CB"}.mdi-adjust:before{content:"\F001A"}.mdi-adobe:before{content:"\F0936"}.mdi-adobe-acrobat:before{content:"\F0F9D"}.mdi-air-conditioner:before{content:"\F001B"}.mdi-air-filter:before{content:"\F0D43"}.mdi-air-horn:before{content:"\F0DAC"}.mdi-air-humidifier:before{content:"\F1099"}.mdi-air-humidifier-off:before{content:"\F1466"}.mdi-air-purifier:before{content:"\F0D44"}.mdi-airbag:before{content:"\F0BE9"}.mdi-airballoon:before{content:"\F001C"}.mdi-airballoon-outline:before{content:"\F100B"}.mdi-airplane:before{content:"\F001D"}.mdi-airplane-landing:before{content:"\F05D4"}.mdi-airplane-off:before{content:"\F001E"}.mdi-airplane-takeoff:before{content:"\F05D5"}.mdi-airport:before{content:"\F084B"}.mdi-alarm:before{content:"\F0020"}.mdi-alarm-bell:before{content:"\F078E"}.mdi-alarm-check:before{content:"\F0021"}.mdi-alarm-light:before{content:"\F078F"}.mdi-alarm-light-off:before{content:"\F171E"}.mdi-alarm-light-off-outline:before{content:"\F171F"}.mdi-alarm-light-outline:before{content:"\F0BEA"}.mdi-alarm-multiple:before{content:"\F0022"}.mdi-alarm-note:before{content:"\F0E71"}.mdi-alarm-note-off:before{content:"\F0E72"}.mdi-alarm-off:before{content:"\F0023"}.mdi-alarm-panel:before{content:"\F15C4"}.mdi-alarm-panel-outline:before{content:"\F15C5"}.mdi-alarm-plus:before{content:"\F0024"}.mdi-alarm-snooze:before{content:"\F068E"}.mdi-album:before{content:"\F0025"}.mdi-alert:before{content:"\F0026"}.mdi-alert-box:before{content:"\F0027"}.mdi-alert-box-outline:before{content:"\F0CE4"}.mdi-alert-circle:before{content:"\F0028"}.mdi-alert-circle-check:before{content:"\F11ED"}.mdi-alert-circle-check-outline:before{content:"\F11EE"}.mdi-alert-circle-outline:before{content:"\F05D6"}.mdi-alert-decagram:before{content:"\F06BD"}.mdi-alert-decagram-outline:before{content:"\F0CE5"}.mdi-alert-minus:before{content:"\F14BB"}.mdi-alert-minus-outline:before{content:"\F14BE"}.mdi-alert-octagon:before{content:"\F0029"}.mdi-alert-octagon-outline:before{content:"\F0CE6"}.mdi-alert-octagram:before{content:"\F0767"}.mdi-alert-octagram-outline:before{content:"\F0CE7"}.mdi-alert-outline:before{content:"\F002A"}.mdi-alert-plus:before{content:"\F14BA"}.mdi-alert-plus-outline:before{content:"\F14BD"}.mdi-alert-remove:before{content:"\F14BC"}.mdi-alert-remove-outline:before{content:"\F14BF"}.mdi-alert-rhombus:before{content:"\F11CE"}.mdi-alert-rhombus-outline:before{content:"\F11CF"}.mdi-alien:before{content:"\F089A"}.mdi-alien-outline:before{content:"\F10CB"}.mdi-align-horizontal-center:before{content:"\F11C3"}.mdi-align-horizontal-left:before{content:"\F11C2"}.mdi-align-horizontal-right:before{content:"\F11C4"}.mdi-align-vertical-bottom:before{content:"\F11C5"}.mdi-align-vertical-center:before{content:"\F11C6"}.mdi-align-vertical-top:before{content:"\F11C7"}.mdi-all-inclusive:before{content:"\F06BE"}.mdi-allergy:before{content:"\F1258"}.mdi-alpha:before{content:"\F002B"}.mdi-alpha-a:before{content:"\F0AEE"}.mdi-alpha-a-box:before{content:"\F0B08"}.mdi-alpha-a-box-outline:before{content:"\F0BEB"}.mdi-alpha-a-circle:before{content:"\F0BEC"}.mdi-alpha-a-circle-outline:before{content:"\F0BED"}.mdi-alpha-b:before{content:"\F0AEF"}.mdi-alpha-b-box:before{content:"\F0B09"}.mdi-alpha-b-box-outline:before{content:"\F0BEE"}.mdi-alpha-b-circle:before{content:"\F0BEF"}.mdi-alpha-b-circle-outline:before{content:"\F0BF0"}.mdi-alpha-c:before{content:"\F0AF0"}.mdi-alpha-c-box:before{content:"\F0B0A"}.mdi-alpha-c-box-outline:before{content:"\F0BF1"}.mdi-alpha-c-circle:before{content:"\F0BF2"}.mdi-alpha-c-circle-outline:before{content:"\F0BF3"}.mdi-alpha-d:before{content:"\F0AF1"}.mdi-alpha-d-box:before{content:"\F0B0B"}.mdi-alpha-d-box-outline:before{content:"\F0BF4"}.mdi-alpha-d-circle:before{content:"\F0BF5"}.mdi-alpha-d-circle-outline:before{content:"\F0BF6"}.mdi-alpha-e:before{content:"\F0AF2"}.mdi-alpha-e-box:before{content:"\F0B0C"}.mdi-alpha-e-box-outline:before{content:"\F0BF7"}.mdi-alpha-e-circle:before{content:"\F0BF8"}.mdi-alpha-e-circle-outline:before{content:"\F0BF9"}.mdi-alpha-f:before{content:"\F0AF3"}.mdi-alpha-f-box:before{content:"\F0B0D"}.mdi-alpha-f-box-outline:before{content:"\F0BFA"}.mdi-alpha-f-circle:before{content:"\F0BFB"}.mdi-alpha-f-circle-outline:before{content:"\F0BFC"}.mdi-alpha-g:before{content:"\F0AF4"}.mdi-alpha-g-box:before{content:"\F0B0E"}.mdi-alpha-g-box-outline:before{content:"\F0BFD"}.mdi-alpha-g-circle:before{content:"\F0BFE"}.mdi-alpha-g-circle-outline:before{content:"\F0BFF"}.mdi-alpha-h:before{content:"\F0AF5"}.mdi-alpha-h-box:before{content:"\F0B0F"}.mdi-alpha-h-box-outline:before{content:"\F0C00"}.mdi-alpha-h-circle:before{content:"\F0C01"}.mdi-alpha-h-circle-outline:before{content:"\F0C02"}.mdi-alpha-i:before{content:"\F0AF6"}.mdi-alpha-i-box:before{content:"\F0B10"}.mdi-alpha-i-box-outline:before{content:"\F0C03"}.mdi-alpha-i-circle:before{content:"\F0C04"}.mdi-alpha-i-circle-outline:before{content:"\F0C05"}.mdi-alpha-j:before{content:"\F0AF7"}.mdi-alpha-j-box:before{content:"\F0B11"}.mdi-alpha-j-box-outline:before{content:"\F0C06"}.mdi-alpha-j-circle:before{content:"\F0C07"}.mdi-alpha-j-circle-outline:before{content:"\F0C08"}.mdi-alpha-k:before{content:"\F0AF8"}.mdi-alpha-k-box:before{content:"\F0B12"}.mdi-alpha-k-box-outline:before{content:"\F0C09"}.mdi-alpha-k-circle:before{content:"\F0C0A"}.mdi-alpha-k-circle-outline:before{content:"\F0C0B"}.mdi-alpha-l:before{content:"\F0AF9"}.mdi-alpha-l-box:before{content:"\F0B13"}.mdi-alpha-l-box-outline:before{content:"\F0C0C"}.mdi-alpha-l-circle:before{content:"\F0C0D"}.mdi-alpha-l-circle-outline:before{content:"\F0C0E"}.mdi-alpha-m:before{content:"\F0AFA"}.mdi-alpha-m-box:before{content:"\F0B14"}.mdi-alpha-m-box-outline:before{content:"\F0C0F"}.mdi-alpha-m-circle:before{content:"\F0C10"}.mdi-alpha-m-circle-outline:before{content:"\F0C11"}.mdi-alpha-n:before{content:"\F0AFB"}.mdi-alpha-n-box:before{content:"\F0B15"}.mdi-alpha-n-box-outline:before{content:"\F0C12"}.mdi-alpha-n-circle:before{content:"\F0C13"}.mdi-alpha-n-circle-outline:before{content:"\F0C14"}.mdi-alpha-o:before{content:"\F0AFC"}.mdi-alpha-o-box:before{content:"\F0B16"}.mdi-alpha-o-box-outline:before{content:"\F0C15"}.mdi-alpha-o-circle:before{content:"\F0C16"}.mdi-alpha-o-circle-outline:before{content:"\F0C17"}.mdi-alpha-p:before{content:"\F0AFD"}.mdi-alpha-p-box:before{content:"\F0B17"}.mdi-alpha-p-box-outline:before{content:"\F0C18"}.mdi-alpha-p-circle:before{content:"\F0C19"}.mdi-alpha-p-circle-outline:before{content:"\F0C1A"}.mdi-alpha-q:before{content:"\F0AFE"}.mdi-alpha-q-box:before{content:"\F0B18"}.mdi-alpha-q-box-outline:before{content:"\F0C1B"}.mdi-alpha-q-circle:before{content:"\F0C1C"}.mdi-alpha-q-circle-outline:before{content:"\F0C1D"}.mdi-alpha-r:before{content:"\F0AFF"}.mdi-alpha-r-box:before{content:"\F0B19"}.mdi-alpha-r-box-outline:before{content:"\F0C1E"}.mdi-alpha-r-circle:before{content:"\F0C1F"}.mdi-alpha-r-circle-outline:before{content:"\F0C20"}.mdi-alpha-s:before{content:"\F0B00"}.mdi-alpha-s-box:before{content:"\F0B1A"}.mdi-alpha-s-box-outline:before{content:"\F0C21"}.mdi-alpha-s-circle:before{content:"\F0C22"}.mdi-alpha-s-circle-outline:before{content:"\F0C23"}.mdi-alpha-t:before{content:"\F0B01"}.mdi-alpha-t-box:before{content:"\F0B1B"}.mdi-alpha-t-box-outline:before{content:"\F0C24"}.mdi-alpha-t-circle:before{content:"\F0C25"}.mdi-alpha-t-circle-outline:before{content:"\F0C26"}.mdi-alpha-u:before{content:"\F0B02"}.mdi-alpha-u-box:before{content:"\F0B1C"}.mdi-alpha-u-box-outline:before{content:"\F0C27"}.mdi-alpha-u-circle:before{content:"\F0C28"}.mdi-alpha-u-circle-outline:before{content:"\F0C29"}.mdi-alpha-v:before{content:"\F0B03"}.mdi-alpha-v-box:before{content:"\F0B1D"}.mdi-alpha-v-box-outline:before{content:"\F0C2A"}.mdi-alpha-v-circle:before{content:"\F0C2B"}.mdi-alpha-v-circle-outline:before{content:"\F0C2C"}.mdi-alpha-w:before{content:"\F0B04"}.mdi-alpha-w-box:before{content:"\F0B1E"}.mdi-alpha-w-box-outline:before{content:"\F0C2D"}.mdi-alpha-w-circle:before{content:"\F0C2E"}.mdi-alpha-w-circle-outline:before{content:"\F0C2F"}.mdi-alpha-x:before{content:"\F0B05"}.mdi-alpha-x-box:before{content:"\F0B1F"}.mdi-alpha-x-box-outline:before{content:"\F0C30"}.mdi-alpha-x-circle:before{content:"\F0C31"}.mdi-alpha-x-circle-outline:before{content:"\F0C32"}.mdi-alpha-y:before{content:"\F0B06"}.mdi-alpha-y-box:before{content:"\F0B20"}.mdi-alpha-y-box-outline:before{content:"\F0C33"}.mdi-alpha-y-circle:before{content:"\F0C34"}.mdi-alpha-y-circle-outline:before{content:"\F0C35"}.mdi-alpha-z:before{content:"\F0B07"}.mdi-alpha-z-box:before{content:"\F0B21"}.mdi-alpha-z-box-outline:before{content:"\F0C36"}.mdi-alpha-z-circle:before{content:"\F0C37"}.mdi-alpha-z-circle-outline:before{content:"\F0C38"}.mdi-alphabet-aurebesh:before{content:"\F132C"}.mdi-alphabet-cyrillic:before{content:"\F132D"}.mdi-alphabet-greek:before{content:"\F132E"}.mdi-alphabet-latin:before{content:"\F132F"}.mdi-alphabet-piqad:before{content:"\F1330"}.mdi-alphabet-tengwar:before{content:"\F1337"}.mdi-alphabetical:before{content:"\F002C"}.mdi-alphabetical-off:before{content:"\F100C"}.mdi-alphabetical-variant:before{content:"\F100D"}.mdi-alphabetical-variant-off:before{content:"\F100E"}.mdi-altimeter:before{content:"\F05D7"}.mdi-amazon:before{content:"\F002D"}.mdi-amazon-alexa:before{content:"\F08C6"}.mdi-ambulance:before{content:"\F002F"}.mdi-ammunition:before{content:"\F0CE8"}.mdi-ampersand:before{content:"\F0A8D"}.mdi-amplifier:before{content:"\F0030"}.mdi-amplifier-off:before{content:"\F11B5"}.mdi-anchor:before{content:"\F0031"}.mdi-android:before{content:"\F0032"}.mdi-android-auto:before{content:"\F0A8E"}.mdi-android-debug-bridge:before{content:"\F0033"}.mdi-android-messages:before{content:"\F0D45"}.mdi-android-studio:before{content:"\F0034"}.mdi-angle-acute:before{content:"\F0937"}.mdi-angle-obtuse:before{content:"\F0938"}.mdi-angle-right:before{content:"\F0939"}.mdi-angular:before{content:"\F06B2"}.mdi-angularjs:before{content:"\F06BF"}.mdi-animation:before{content:"\F05D8"}.mdi-animation-outline:before{content:"\F0A8F"}.mdi-animation-play:before{content:"\F093A"}.mdi-animation-play-outline:before{content:"\F0A90"}.mdi-ansible:before{content:"\F109A"}.mdi-antenna:before{content:"\F1119"}.mdi-anvil:before{content:"\F089B"}.mdi-apache-kafka:before{content:"\F100F"}.mdi-api:before{content:"\F109B"}.mdi-api-off:before{content:"\F1257"}.mdi-apple:before{content:"\F0035"}.mdi-apple-airplay:before{content:"\F001F"}.mdi-apple-finder:before{content:"\F0036"}.mdi-apple-icloud:before{content:"\F0038"}.mdi-apple-ios:before{content:"\F0037"}.mdi-apple-keyboard-caps:before{content:"\F0632"}.mdi-apple-keyboard-command:before{content:"\F0633"}.mdi-apple-keyboard-control:before{content:"\F0634"}.mdi-apple-keyboard-option:before{content:"\F0635"}.mdi-apple-keyboard-shift:before{content:"\F0636"}.mdi-apple-safari:before{content:"\F0039"}.mdi-application:before{content:"\F0614"}.mdi-application-cog:before{content:"\F1577"}.mdi-application-export:before{content:"\F0DAD"}.mdi-application-import:before{content:"\F0DAE"}.mdi-application-settings:before{content:"\F1555"}.mdi-approximately-equal:before{content:"\F0F9E"}.mdi-approximately-equal-box:before{content:"\F0F9F"}.mdi-apps:before{content:"\F003B"}.mdi-apps-box:before{content:"\F0D46"}.mdi-arch:before{content:"\F08C7"}.mdi-archive:before{content:"\F003C"}.mdi-archive-alert:before{content:"\F14FD"}.mdi-archive-alert-outline:before{content:"\F14FE"}.mdi-archive-arrow-down:before{content:"\F1259"}.mdi-archive-arrow-down-outline:before{content:"\F125A"}.mdi-archive-arrow-up:before{content:"\F125B"}.mdi-archive-arrow-up-outline:before{content:"\F125C"}.mdi-archive-outline:before{content:"\F120E"}.mdi-arm-flex:before{content:"\F0FD7"}.mdi-arm-flex-outline:before{content:"\F0FD6"}.mdi-arrange-bring-forward:before{content:"\F003D"}.mdi-arrange-bring-to-front:before{content:"\F003E"}.mdi-arrange-send-backward:before{content:"\F003F"}.mdi-arrange-send-to-back:before{content:"\F0040"}.mdi-arrow-all:before{content:"\F0041"}.mdi-arrow-bottom-left:before{content:"\F0042"}.mdi-arrow-bottom-left-bold-outline:before{content:"\F09B7"}.mdi-arrow-bottom-left-thick:before{content:"\F09B8"}.mdi-arrow-bottom-left-thin-circle-outline:before{content:"\F1596"}.mdi-arrow-bottom-right:before{content:"\F0043"}.mdi-arrow-bottom-right-bold-outline:before{content:"\F09B9"}.mdi-arrow-bottom-right-thick:before{content:"\F09BA"}.mdi-arrow-bottom-right-thin-circle-outline:before{content:"\F1595"}.mdi-arrow-collapse:before{content:"\F0615"}.mdi-arrow-collapse-all:before{content:"\F0044"}.mdi-arrow-collapse-down:before{content:"\F0792"}.mdi-arrow-collapse-horizontal:before{content:"\F084C"}.mdi-arrow-collapse-left:before{content:"\F0793"}.mdi-arrow-collapse-right:before{content:"\F0794"}.mdi-arrow-collapse-up:before{content:"\F0795"}.mdi-arrow-collapse-vertical:before{content:"\F084D"}.mdi-arrow-decision:before{content:"\F09BB"}.mdi-arrow-decision-auto:before{content:"\F09BC"}.mdi-arrow-decision-auto-outline:before{content:"\F09BD"}.mdi-arrow-decision-outline:before{content:"\F09BE"}.mdi-arrow-down:before{content:"\F0045"}.mdi-arrow-down-bold:before{content:"\F072E"}.mdi-arrow-down-bold-box:before{content:"\F072F"}.mdi-arrow-down-bold-box-outline:before{content:"\F0730"}.mdi-arrow-down-bold-circle:before{content:"\F0047"}.mdi-arrow-down-bold-circle-outline:before{content:"\F0048"}.mdi-arrow-down-bold-hexagon-outline:before{content:"\F0049"}.mdi-arrow-down-bold-outline:before{content:"\F09BF"}.mdi-arrow-down-box:before{content:"\F06C0"}.mdi-arrow-down-circle:before{content:"\F0CDB"}.mdi-arrow-down-circle-outline:before{content:"\F0CDC"}.mdi-arrow-down-drop-circle:before{content:"\F004A"}.mdi-arrow-down-drop-circle-outline:before{content:"\F004B"}.mdi-arrow-down-thick:before{content:"\F0046"}.mdi-arrow-down-thin-circle-outline:before{content:"\F1599"}.mdi-arrow-expand:before{content:"\F0616"}.mdi-arrow-expand-all:before{content:"\F004C"}.mdi-arrow-expand-down:before{content:"\F0796"}.mdi-arrow-expand-horizontal:before{content:"\F084E"}.mdi-arrow-expand-left:before{content:"\F0797"}.mdi-arrow-expand-right:before{content:"\F0798"}.mdi-arrow-expand-up:before{content:"\F0799"}.mdi-arrow-expand-vertical:before{content:"\F084F"}.mdi-arrow-horizontal-lock:before{content:"\F115B"}.mdi-arrow-left:before{content:"\F004D"}.mdi-arrow-left-bold:before{content:"\F0731"}.mdi-arrow-left-bold-box:before{content:"\F0732"}.mdi-arrow-left-bold-box-outline:before{content:"\F0733"}.mdi-arrow-left-bold-circle:before{content:"\F004F"}.mdi-arrow-left-bold-circle-outline:before{content:"\F0050"}.mdi-arrow-left-bold-hexagon-outline:before{content:"\F0051"}.mdi-arrow-left-bold-outline:before{content:"\F09C0"}.mdi-arrow-left-box:before{content:"\F06C1"}.mdi-arrow-left-circle:before{content:"\F0CDD"}.mdi-arrow-left-circle-outline:before{content:"\F0CDE"}.mdi-arrow-left-drop-circle:before{content:"\F0052"}.mdi-arrow-left-drop-circle-outline:before{content:"\F0053"}.mdi-arrow-left-right:before{content:"\F0E73"}.mdi-arrow-left-right-bold:before{content:"\F0E74"}.mdi-arrow-left-right-bold-outline:before{content:"\F09C1"}.mdi-arrow-left-thick:before{content:"\F004E"}.mdi-arrow-left-thin-circle-outline:before{content:"\F159A"}.mdi-arrow-right:before{content:"\F0054"}.mdi-arrow-right-bold:before{content:"\F0734"}.mdi-arrow-right-bold-box:before{content:"\F0735"}.mdi-arrow-right-bold-box-outline:before{content:"\F0736"}.mdi-arrow-right-bold-circle:before{content:"\F0056"}.mdi-arrow-right-bold-circle-outline:before{content:"\F0057"}.mdi-arrow-right-bold-hexagon-outline:before{content:"\F0058"}.mdi-arrow-right-bold-outline:before{content:"\F09C2"}.mdi-arrow-right-box:before{content:"\F06C2"}.mdi-arrow-right-circle:before{content:"\F0CDF"}.mdi-arrow-right-circle-outline:before{content:"\F0CE0"}.mdi-arrow-right-drop-circle:before{content:"\F0059"}.mdi-arrow-right-drop-circle-outline:before{content:"\F005A"}.mdi-arrow-right-thick:before{content:"\F0055"}.mdi-arrow-right-thin-circle-outline:before{content:"\F1598"}.mdi-arrow-split-horizontal:before{content:"\F093B"}.mdi-arrow-split-vertical:before{content:"\F093C"}.mdi-arrow-top-left:before{content:"\F005B"}.mdi-arrow-top-left-bold-outline:before{content:"\F09C3"}.mdi-arrow-top-left-bottom-right:before{content:"\F0E75"}.mdi-arrow-top-left-bottom-right-bold:before{content:"\F0E76"}.mdi-arrow-top-left-thick:before{content:"\F09C4"}.mdi-arrow-top-left-thin-circle-outline:before{content:"\F1593"}.mdi-arrow-top-right:before{content:"\F005C"}.mdi-arrow-top-right-bold-outline:before{content:"\F09C5"}.mdi-arrow-top-right-bottom-left:before{content:"\F0E77"}.mdi-arrow-top-right-bottom-left-bold:before{content:"\F0E78"}.mdi-arrow-top-right-thick:before{content:"\F09C6"}.mdi-arrow-top-right-thin-circle-outline:before{content:"\F1594"}.mdi-arrow-up:before{content:"\F005D"}.mdi-arrow-up-bold:before{content:"\F0737"}.mdi-arrow-up-bold-box:before{content:"\F0738"}.mdi-arrow-up-bold-box-outline:before{content:"\F0739"}.mdi-arrow-up-bold-circle:before{content:"\F005F"}.mdi-arrow-up-bold-circle-outline:before{content:"\F0060"}.mdi-arrow-up-bold-hexagon-outline:before{content:"\F0061"}.mdi-arrow-up-bold-outline:before{content:"\F09C7"}.mdi-arrow-up-box:before{content:"\F06C3"}.mdi-arrow-up-circle:before{content:"\F0CE1"}.mdi-arrow-up-circle-outline:before{content:"\F0CE2"}.mdi-arrow-up-down:before{content:"\F0E79"}.mdi-arrow-up-down-bold:before{content:"\F0E7A"}.mdi-arrow-up-down-bold-outline:before{content:"\F09C8"}.mdi-arrow-up-drop-circle:before{content:"\F0062"}.mdi-arrow-up-drop-circle-outline:before{content:"\F0063"}.mdi-arrow-up-thick:before{content:"\F005E"}.mdi-arrow-up-thin-circle-outline:before{content:"\F1597"}.mdi-arrow-vertical-lock:before{content:"\F115C"}.mdi-artstation:before{content:"\F0B5B"}.mdi-aspect-ratio:before{content:"\F0A24"}.mdi-assistant:before{content:"\F0064"}.mdi-asterisk:before{content:"\F06C4"}.mdi-at:before{content:"\F0065"}.mdi-atlassian:before{content:"\F0804"}.mdi-atm:before{content:"\F0D47"}.mdi-atom:before{content:"\F0768"}.mdi-atom-variant:before{content:"\F0E7B"}.mdi-attachment:before{content:"\F0066"}.mdi-audio-video:before{content:"\F093D"}.mdi-audio-video-off:before{content:"\F11B6"}.mdi-augmented-reality:before{content:"\F0850"}.mdi-auto-download:before{content:"\F137E"}.mdi-auto-fix:before{content:"\F0068"}.mdi-auto-upload:before{content:"\F0069"}.mdi-autorenew:before{content:"\F006A"}.mdi-av-timer:before{content:"\F006B"}.mdi-aws:before{content:"\F0E0F"}.mdi-axe:before{content:"\F08C8"}.mdi-axis:before{content:"\F0D48"}.mdi-axis-arrow:before{content:"\F0D49"}.mdi-axis-arrow-info:before{content:"\F140E"}.mdi-axis-arrow-lock:before{content:"\F0D4A"}.mdi-axis-lock:before{content:"\F0D4B"}.mdi-axis-x-arrow:before{content:"\F0D4C"}.mdi-axis-x-arrow-lock:before{content:"\F0D4D"}.mdi-axis-x-rotate-clockwise:before{content:"\F0D4E"}.mdi-axis-x-rotate-counterclockwise:before{content:"\F0D4F"}.mdi-axis-x-y-arrow-lock:before{content:"\F0D50"}.mdi-axis-y-arrow:before{content:"\F0D51"}.mdi-axis-y-arrow-lock:before{content:"\F0D52"}.mdi-axis-y-rotate-clockwise:before{content:"\F0D53"}.mdi-axis-y-rotate-counterclockwise:before{content:"\F0D54"}.mdi-axis-z-arrow:before{content:"\F0D55"}.mdi-axis-z-arrow-lock:before{content:"\F0D56"}.mdi-axis-z-rotate-clockwise:before{content:"\F0D57"}.mdi-axis-z-rotate-counterclockwise:before{content:"\F0D58"}.mdi-babel:before{content:"\F0A25"}.mdi-baby:before{content:"\F006C"}.mdi-baby-bottle:before{content:"\F0F39"}.mdi-baby-bottle-outline:before{content:"\F0F3A"}.mdi-baby-buggy:before{content:"\F13E0"}.mdi-baby-carriage:before{content:"\F068F"}.mdi-baby-carriage-off:before{content:"\F0FA0"}.mdi-baby-face:before{content:"\F0E7C"}.mdi-baby-face-outline:before{content:"\F0E7D"}.mdi-backburger:before{content:"\F006D"}.mdi-backspace:before{content:"\F006E"}.mdi-backspace-outline:before{content:"\F0B5C"}.mdi-backspace-reverse:before{content:"\F0E7E"}.mdi-backspace-reverse-outline:before{content:"\F0E7F"}.mdi-backup-restore:before{content:"\F006F"}.mdi-bacteria:before{content:"\F0ED5"}.mdi-bacteria-outline:before{content:"\F0ED6"}.mdi-badge-account:before{content:"\F0DA7"}.mdi-badge-account-alert:before{content:"\F0DA8"}.mdi-badge-account-alert-outline:before{content:"\F0DA9"}.mdi-badge-account-horizontal:before{content:"\F0E0D"}.mdi-badge-account-horizontal-outline:before{content:"\F0E0E"}.mdi-badge-account-outline:before{content:"\F0DAA"}.mdi-badminton:before{content:"\F0851"}.mdi-bag-carry-on:before{content:"\F0F3B"}.mdi-bag-carry-on-check:before{content:"\F0D65"}.mdi-bag-carry-on-off:before{content:"\F0F3C"}.mdi-bag-checked:before{content:"\F0F3D"}.mdi-bag-personal:before{content:"\F0E10"}.mdi-bag-personal-off:before{content:"\F0E11"}.mdi-bag-personal-off-outline:before{content:"\F0E12"}.mdi-bag-personal-outline:before{content:"\F0E13"}.mdi-bag-suitcase:before{content:"\F158B"}.mdi-bag-suitcase-off:before{content:"\F158D"}.mdi-bag-suitcase-off-outline:before{content:"\F158E"}.mdi-bag-suitcase-outline:before{content:"\F158C"}.mdi-baguette:before{content:"\F0F3E"}.mdi-balloon:before{content:"\F0A26"}.mdi-ballot:before{content:"\F09C9"}.mdi-ballot-outline:before{content:"\F09CA"}.mdi-ballot-recount:before{content:"\F0C39"}.mdi-ballot-recount-outline:before{content:"\F0C3A"}.mdi-bandage:before{content:"\F0DAF"}.mdi-bandcamp:before{content:"\F0675"}.mdi-bank:before{content:"\F0070"}.mdi-bank-check:before{content:"\F1655"}.mdi-bank-minus:before{content:"\F0DB0"}.mdi-bank-off:before{content:"\F1656"}.mdi-bank-off-outline:before{content:"\F1657"}.mdi-bank-outline:before{content:"\F0E80"}.mdi-bank-plus:before{content:"\F0DB1"}.mdi-bank-remove:before{content:"\F0DB2"}.mdi-bank-transfer:before{content:"\F0A27"}.mdi-bank-transfer-in:before{content:"\F0A28"}.mdi-bank-transfer-out:before{content:"\F0A29"}.mdi-barcode:before{content:"\F0071"}.mdi-barcode-off:before{content:"\F1236"}.mdi-barcode-scan:before{content:"\F0072"}.mdi-barley:before{content:"\F0073"}.mdi-barley-off:before{content:"\F0B5D"}.mdi-barn:before{content:"\F0B5E"}.mdi-barrel:before{content:"\F0074"}.mdi-baseball:before{content:"\F0852"}.mdi-baseball-bat:before{content:"\F0853"}.mdi-baseball-diamond:before{content:"\F15EC"}.mdi-baseball-diamond-outline:before{content:"\F15ED"}.mdi-bash:before{content:"\F1183"}.mdi-basket:before{content:"\F0076"}.mdi-basket-fill:before{content:"\F0077"}.mdi-basket-minus:before{content:"\F1523"}.mdi-basket-minus-outline:before{content:"\F1524"}.mdi-basket-off:before{content:"\F1525"}.mdi-basket-off-outline:before{content:"\F1526"}.mdi-basket-outline:before{content:"\F1181"}.mdi-basket-plus:before{content:"\F1527"}.mdi-basket-plus-outline:before{content:"\F1528"}.mdi-basket-remove:before{content:"\F1529"}.mdi-basket-remove-outline:before{content:"\F152A"}.mdi-basket-unfill:before{content:"\F0078"}.mdi-basketball:before{content:"\F0806"}.mdi-basketball-hoop:before{content:"\F0C3B"}.mdi-basketball-hoop-outline:before{content:"\F0C3C"}.mdi-bat:before{content:"\F0B5F"}.mdi-battery:before{content:"\F0079"}.mdi-battery-10:before{content:"\F007A"}.mdi-battery-10-bluetooth:before{content:"\F093E"}.mdi-battery-20:before{content:"\F007B"}.mdi-battery-20-bluetooth:before{content:"\F093F"}.mdi-battery-30:before{content:"\F007C"}.mdi-battery-30-bluetooth:before{content:"\F0940"}.mdi-battery-40:before{content:"\F007D"}.mdi-battery-40-bluetooth:before{content:"\F0941"}.mdi-battery-50:before{content:"\F007E"}.mdi-battery-50-bluetooth:before{content:"\F0942"}.mdi-battery-60:before{content:"\F007F"}.mdi-battery-60-bluetooth:before{content:"\F0943"}.mdi-battery-70:before{content:"\F0080"}.mdi-battery-70-bluetooth:before{content:"\F0944"}.mdi-battery-80:before{content:"\F0081"}.mdi-battery-80-bluetooth:before{content:"\F0945"}.mdi-battery-90:before{content:"\F0082"}.mdi-battery-90-bluetooth:before{content:"\F0946"}.mdi-battery-alert:before{content:"\F0083"}.mdi-battery-alert-bluetooth:before{content:"\F0947"}.mdi-battery-alert-variant:before{content:"\F10CC"}.mdi-battery-alert-variant-outline:before{content:"\F10CD"}.mdi-battery-bluetooth:before{content:"\F0948"}.mdi-battery-bluetooth-variant:before{content:"\F0949"}.mdi-battery-charging:before{content:"\F0084"}.mdi-battery-charging-10:before{content:"\F089C"}.mdi-battery-charging-100:before{content:"\F0085"}.mdi-battery-charging-20:before{content:"\F0086"}.mdi-battery-charging-30:before{content:"\F0087"}.mdi-battery-charging-40:before{content:"\F0088"}.mdi-battery-charging-50:before{content:"\F089D"}.mdi-battery-charging-60:before{content:"\F0089"}.mdi-battery-charging-70:before{content:"\F089E"}.mdi-battery-charging-80:before{content:"\F008A"}.mdi-battery-charging-90:before{content:"\F008B"}.mdi-battery-charging-high:before{content:"\F12A6"}.mdi-battery-charging-low:before{content:"\F12A4"}.mdi-battery-charging-medium:before{content:"\F12A5"}.mdi-battery-charging-outline:before{content:"\F089F"}.mdi-battery-charging-wireless:before{content:"\F0807"}.mdi-battery-charging-wireless-10:before{content:"\F0808"}.mdi-battery-charging-wireless-20:before{content:"\F0809"}.mdi-battery-charging-wireless-30:before{content:"\F080A"}.mdi-battery-charging-wireless-40:before{content:"\F080B"}.mdi-battery-charging-wireless-50:before{content:"\F080C"}.mdi-battery-charging-wireless-60:before{content:"\F080D"}.mdi-battery-charging-wireless-70:before{content:"\F080E"}.mdi-battery-charging-wireless-80:before{content:"\F080F"}.mdi-battery-charging-wireless-90:before{content:"\F0810"}.mdi-battery-charging-wireless-alert:before{content:"\F0811"}.mdi-battery-charging-wireless-outline:before{content:"\F0812"}.mdi-battery-heart:before{content:"\F120F"}.mdi-battery-heart-outline:before{content:"\F1210"}.mdi-battery-heart-variant:before{content:"\F1211"}.mdi-battery-high:before{content:"\F12A3"}.mdi-battery-low:before{content:"\F12A1"}.mdi-battery-medium:before{content:"\F12A2"}.mdi-battery-minus:before{content:"\F008C"}.mdi-battery-negative:before{content:"\F008D"}.mdi-battery-off:before{content:"\F125D"}.mdi-battery-off-outline:before{content:"\F125E"}.mdi-battery-outline:before{content:"\F008E"}.mdi-battery-plus:before{content:"\F008F"}.mdi-battery-positive:before{content:"\F0090"}.mdi-battery-unknown:before{content:"\F0091"}.mdi-battery-unknown-bluetooth:before{content:"\F094A"}.mdi-battlenet:before{content:"\F0B60"}.mdi-beach:before{content:"\F0092"}.mdi-beaker:before{content:"\F0CEA"}.mdi-beaker-alert:before{content:"\F1229"}.mdi-beaker-alert-outline:before{content:"\F122A"}.mdi-beaker-check:before{content:"\F122B"}.mdi-beaker-check-outline:before{content:"\F122C"}.mdi-beaker-minus:before{content:"\F122D"}.mdi-beaker-minus-outline:before{content:"\F122E"}.mdi-beaker-outline:before{content:"\F0690"}.mdi-beaker-plus:before{content:"\F122F"}.mdi-beaker-plus-outline:before{content:"\F1230"}.mdi-beaker-question:before{content:"\F1231"}.mdi-beaker-question-outline:before{content:"\F1232"}.mdi-beaker-remove:before{content:"\F1233"}.mdi-beaker-remove-outline:before{content:"\F1234"}.mdi-bed:before{content:"\F02E3"}.mdi-bed-double:before{content:"\F0FD4"}.mdi-bed-double-outline:before{content:"\F0FD3"}.mdi-bed-empty:before{content:"\F08A0"}.mdi-bed-king:before{content:"\F0FD2"}.mdi-bed-king-outline:before{content:"\F0FD1"}.mdi-bed-outline:before{content:"\F0099"}.mdi-bed-queen:before{content:"\F0FD0"}.mdi-bed-queen-outline:before{content:"\F0FDB"}.mdi-bed-single:before{content:"\F106D"}.mdi-bed-single-outline:before{content:"\F106E"}.mdi-bee:before{content:"\F0FA1"}.mdi-bee-flower:before{content:"\F0FA2"}.mdi-beehive-off-outline:before{content:"\F13ED"}.mdi-beehive-outline:before{content:"\F10CE"}.mdi-beekeeper:before{content:"\F14E2"}.mdi-beer:before{content:"\F0098"}.mdi-beer-outline:before{content:"\F130C"}.mdi-bell:before{content:"\F009A"}.mdi-bell-alert:before{content:"\F0D59"}.mdi-bell-alert-outline:before{content:"\F0E81"}.mdi-bell-cancel:before{content:"\F13E7"}.mdi-bell-cancel-outline:before{content:"\F13E8"}.mdi-bell-check:before{content:"\F11E5"}.mdi-bell-check-outline:before{content:"\F11E6"}.mdi-bell-circle:before{content:"\F0D5A"}.mdi-bell-circle-outline:before{content:"\F0D5B"}.mdi-bell-minus:before{content:"\F13E9"}.mdi-bell-minus-outline:before{content:"\F13EA"}.mdi-bell-off:before{content:"\F009B"}.mdi-bell-off-outline:before{content:"\F0A91"}.mdi-bell-outline:before{content:"\F009C"}.mdi-bell-plus:before{content:"\F009D"}.mdi-bell-plus-outline:before{content:"\F0A92"}.mdi-bell-remove:before{content:"\F13EB"}.mdi-bell-remove-outline:before{content:"\F13EC"}.mdi-bell-ring:before{content:"\F009E"}.mdi-bell-ring-outline:before{content:"\F009F"}.mdi-bell-sleep:before{content:"\F00A0"}.mdi-bell-sleep-outline:before{content:"\F0A93"}.mdi-beta:before{content:"\F00A1"}.mdi-betamax:before{content:"\F09CB"}.mdi-biathlon:before{content:"\F0E14"}.mdi-bicycle:before{content:"\F109C"}.mdi-bicycle-basket:before{content:"\F1235"}.mdi-bicycle-electric:before{content:"\F15B4"}.mdi-bicycle-penny-farthing:before{content:"\F15E9"}.mdi-bike:before{content:"\F00A3"}.mdi-bike-fast:before{content:"\F111F"}.mdi-billboard:before{content:"\F1010"}.mdi-billiards:before{content:"\F0B61"}.mdi-billiards-rack:before{content:"\F0B62"}.mdi-binoculars:before{content:"\F00A5"}.mdi-bio:before{content:"\F00A6"}.mdi-biohazard:before{content:"\F00A7"}.mdi-bird:before{content:"\F15C6"}.mdi-bitbucket:before{content:"\F00A8"}.mdi-bitcoin:before{content:"\F0813"}.mdi-black-mesa:before{content:"\F00A9"}.mdi-blender:before{content:"\F0CEB"}.mdi-blender-software:before{content:"\F00AB"}.mdi-blinds:before{content:"\F00AC"}.mdi-blinds-open:before{content:"\F1011"}.mdi-block-helper:before{content:"\F00AD"}.mdi-blogger:before{content:"\F00AE"}.mdi-blood-bag:before{content:"\F0CEC"}.mdi-bluetooth:before{content:"\F00AF"}.mdi-bluetooth-audio:before{content:"\F00B0"}.mdi-bluetooth-connect:before{content:"\F00B1"}.mdi-bluetooth-off:before{content:"\F00B2"}.mdi-bluetooth-settings:before{content:"\F00B3"}.mdi-bluetooth-transfer:before{content:"\F00B4"}.mdi-blur:before{content:"\F00B5"}.mdi-blur-linear:before{content:"\F00B6"}.mdi-blur-off:before{content:"\F00B7"}.mdi-blur-radial:before{content:"\F00B8"}.mdi-bolnisi-cross:before{content:"\F0CED"}.mdi-bolt:before{content:"\F0DB3"}.mdi-bomb:before{content:"\F0691"}.mdi-bomb-off:before{content:"\F06C5"}.mdi-bone:before{content:"\F00B9"}.mdi-book:before{content:"\F00BA"}.mdi-book-account:before{content:"\F13AD"}.mdi-book-account-outline:before{content:"\F13AE"}.mdi-book-alert:before{content:"\F167C"}.mdi-book-alert-outline:before{content:"\F167D"}.mdi-book-alphabet:before{content:"\F061D"}.mdi-book-arrow-down:before{content:"\F167E"}.mdi-book-arrow-down-outline:before{content:"\F167F"}.mdi-book-arrow-left:before{content:"\F1680"}.mdi-book-arrow-left-outline:before{content:"\F1681"}.mdi-book-arrow-right:before{content:"\F1682"}.mdi-book-arrow-right-outline:before{content:"\F1683"}.mdi-book-arrow-up:before{content:"\F1684"}.mdi-book-arrow-up-outline:before{content:"\F1685"}.mdi-book-cancel:before{content:"\F1686"}.mdi-book-cancel-outline:before{content:"\F1687"}.mdi-book-check:before{content:"\F14F3"}.mdi-book-check-outline:before{content:"\F14F4"}.mdi-book-clock:before{content:"\F1688"}.mdi-book-clock-outline:before{content:"\F1689"}.mdi-book-cog:before{content:"\F168A"}.mdi-book-cog-outline:before{content:"\F168B"}.mdi-book-cross:before{content:"\F00A2"}.mdi-book-edit:before{content:"\F168C"}.mdi-book-edit-outline:before{content:"\F168D"}.mdi-book-education:before{content:"\F16C9"}.mdi-book-education-outline:before{content:"\F16CA"}.mdi-book-information-variant:before{content:"\F106F"}.mdi-book-lock:before{content:"\F079A"}.mdi-book-lock-open:before{content:"\F079B"}.mdi-book-lock-open-outline:before{content:"\F168E"}.mdi-book-lock-outline:before{content:"\F168F"}.mdi-book-marker:before{content:"\F1690"}.mdi-book-marker-outline:before{content:"\F1691"}.mdi-book-minus:before{content:"\F05D9"}.mdi-book-minus-multiple:before{content:"\F0A94"}.mdi-book-minus-multiple-outline:before{content:"\F090B"}.mdi-book-minus-outline:before{content:"\F1692"}.mdi-book-multiple:before{content:"\F00BB"}.mdi-book-multiple-outline:before{content:"\F0436"}.mdi-book-music:before{content:"\F0067"}.mdi-book-music-outline:before{content:"\F1693"}.mdi-book-off:before{content:"\F1694"}.mdi-book-off-outline:before{content:"\F1695"}.mdi-book-open:before{content:"\F00BD"}.mdi-book-open-blank-variant:before{content:"\F00BE"}.mdi-book-open-outline:before{content:"\F0B63"}.mdi-book-open-page-variant:before{content:"\F05DA"}.mdi-book-open-page-variant-outline:before{content:"\F15D6"}.mdi-book-open-variant:before{content:"\F14F7"}.mdi-book-outline:before{content:"\F0B64"}.mdi-book-play:before{content:"\F0E82"}.mdi-book-play-outline:before{content:"\F0E83"}.mdi-book-plus:before{content:"\F05DB"}.mdi-book-plus-multiple:before{content:"\F0A95"}.mdi-book-plus-multiple-outline:before{content:"\F0ADE"}.mdi-book-plus-outline:before{content:"\F1696"}.mdi-book-refresh:before{content:"\F1697"}.mdi-book-refresh-outline:before{content:"\F1698"}.mdi-book-remove:before{content:"\F0A97"}.mdi-book-remove-multiple:before{content:"\F0A96"}.mdi-book-remove-multiple-outline:before{content:"\F04CA"}.mdi-book-remove-outline:before{content:"\F1699"}.mdi-book-search:before{content:"\F0E84"}.mdi-book-search-outline:before{content:"\F0E85"}.mdi-book-settings:before{content:"\F169A"}.mdi-book-settings-outline:before{content:"\F169B"}.mdi-book-sync:before{content:"\F169C"}.mdi-book-sync-outline:before{content:"\F16C8"}.mdi-book-variant:before{content:"\F00BF"}.mdi-book-variant-multiple:before{content:"\F00BC"}.mdi-bookmark:before{content:"\F00C0"}.mdi-bookmark-check:before{content:"\F00C1"}.mdi-bookmark-check-outline:before{content:"\F137B"}.mdi-bookmark-minus:before{content:"\F09CC"}.mdi-bookmark-minus-outline:before{content:"\F09CD"}.mdi-bookmark-multiple:before{content:"\F0E15"}.mdi-bookmark-multiple-outline:before{content:"\F0E16"}.mdi-bookmark-music:before{content:"\F00C2"}.mdi-bookmark-music-outline:before{content:"\F1379"}.mdi-bookmark-off:before{content:"\F09CE"}.mdi-bookmark-off-outline:before{content:"\F09CF"}.mdi-bookmark-outline:before{content:"\F00C3"}.mdi-bookmark-plus:before{content:"\F00C5"}.mdi-bookmark-plus-outline:before{content:"\F00C4"}.mdi-bookmark-remove:before{content:"\F00C6"}.mdi-bookmark-remove-outline:before{content:"\F137A"}.mdi-bookshelf:before{content:"\F125F"}.mdi-boom-gate:before{content:"\F0E86"}.mdi-boom-gate-alert:before{content:"\F0E87"}.mdi-boom-gate-alert-outline:before{content:"\F0E88"}.mdi-boom-gate-down:before{content:"\F0E89"}.mdi-boom-gate-down-outline:before{content:"\F0E8A"}.mdi-boom-gate-outline:before{content:"\F0E8B"}.mdi-boom-gate-up:before{content:"\F0E8C"}.mdi-boom-gate-up-outline:before{content:"\F0E8D"}.mdi-boombox:before{content:"\F05DC"}.mdi-boomerang:before{content:"\F10CF"}.mdi-bootstrap:before{content:"\F06C6"}.mdi-border-all:before{content:"\F00C7"}.mdi-border-all-variant:before{content:"\F08A1"}.mdi-border-bottom:before{content:"\F00C8"}.mdi-border-bottom-variant:before{content:"\F08A2"}.mdi-border-color:before{content:"\F00C9"}.mdi-border-horizontal:before{content:"\F00CA"}.mdi-border-inside:before{content:"\F00CB"}.mdi-border-left:before{content:"\F00CC"}.mdi-border-left-variant:before{content:"\F08A3"}.mdi-border-none:before{content:"\F00CD"}.mdi-border-none-variant:before{content:"\F08A4"}.mdi-border-outside:before{content:"\F00CE"}.mdi-border-right:before{content:"\F00CF"}.mdi-border-right-variant:before{content:"\F08A5"}.mdi-border-style:before{content:"\F00D0"}.mdi-border-top:before{content:"\F00D1"}.mdi-border-top-variant:before{content:"\F08A6"}.mdi-border-vertical:before{content:"\F00D2"}.mdi-bottle-soda:before{content:"\F1070"}.mdi-bottle-soda-classic:before{content:"\F1071"}.mdi-bottle-soda-classic-outline:before{content:"\F1363"}.mdi-bottle-soda-outline:before{content:"\F1072"}.mdi-bottle-tonic:before{content:"\F112E"}.mdi-bottle-tonic-outline:before{content:"\F112F"}.mdi-bottle-tonic-plus:before{content:"\F1130"}.mdi-bottle-tonic-plus-outline:before{content:"\F1131"}.mdi-bottle-tonic-skull:before{content:"\F1132"}.mdi-bottle-tonic-skull-outline:before{content:"\F1133"}.mdi-bottle-wine:before{content:"\F0854"}.mdi-bottle-wine-outline:before{content:"\F1310"}.mdi-bow-tie:before{content:"\F0678"}.mdi-bowl:before{content:"\F028E"}.mdi-bowl-mix:before{content:"\F0617"}.mdi-bowl-mix-outline:before{content:"\F02E4"}.mdi-bowl-outline:before{content:"\F02A9"}.mdi-bowling:before{content:"\F00D3"}.mdi-box:before{content:"\F00D4"}.mdi-box-cutter:before{content:"\F00D5"}.mdi-box-cutter-off:before{content:"\F0B4A"}.mdi-box-shadow:before{content:"\F0637"}.mdi-boxing-glove:before{content:"\F0B65"}.mdi-braille:before{content:"\F09D0"}.mdi-brain:before{content:"\F09D1"}.mdi-bread-slice:before{content:"\F0CEE"}.mdi-bread-slice-outline:before{content:"\F0CEF"}.mdi-bridge:before{content:"\F0618"}.mdi-briefcase:before{content:"\F00D6"}.mdi-briefcase-account:before{content:"\F0CF0"}.mdi-briefcase-account-outline:before{content:"\F0CF1"}.mdi-briefcase-check:before{content:"\F00D7"}.mdi-briefcase-check-outline:before{content:"\F131E"}.mdi-briefcase-clock:before{content:"\F10D0"}.mdi-briefcase-clock-outline:before{content:"\F10D1"}.mdi-briefcase-download:before{content:"\F00D8"}.mdi-briefcase-download-outline:before{content:"\F0C3D"}.mdi-briefcase-edit:before{content:"\F0A98"}.mdi-briefcase-edit-outline:before{content:"\F0C3E"}.mdi-briefcase-minus:before{content:"\F0A2A"}.mdi-briefcase-minus-outline:before{content:"\F0C3F"}.mdi-briefcase-off:before{content:"\F1658"}.mdi-briefcase-off-outline:before{content:"\F1659"}.mdi-briefcase-outline:before{content:"\F0814"}.mdi-briefcase-plus:before{content:"\F0A2B"}.mdi-briefcase-plus-outline:before{content:"\F0C40"}.mdi-briefcase-remove:before{content:"\F0A2C"}.mdi-briefcase-remove-outline:before{content:"\F0C41"}.mdi-briefcase-search:before{content:"\F0A2D"}.mdi-briefcase-search-outline:before{content:"\F0C42"}.mdi-briefcase-upload:before{content:"\F00D9"}.mdi-briefcase-upload-outline:before{content:"\F0C43"}.mdi-briefcase-variant:before{content:"\F1494"}.mdi-briefcase-variant-off:before{content:"\F165A"}.mdi-briefcase-variant-off-outline:before{content:"\F165B"}.mdi-briefcase-variant-outline:before{content:"\F1495"}.mdi-brightness-1:before{content:"\F00DA"}.mdi-brightness-2:before{content:"\F00DB"}.mdi-brightness-3:before{content:"\F00DC"}.mdi-brightness-4:before{content:"\F00DD"}.mdi-brightness-5:before{content:"\F00DE"}.mdi-brightness-6:before{content:"\F00DF"}.mdi-brightness-7:before{content:"\F00E0"}.mdi-brightness-auto:before{content:"\F00E1"}.mdi-brightness-percent:before{content:"\F0CF2"}.mdi-broadcast:before{content:"\F1720"}.mdi-broadcast-off:before{content:"\F1721"}.mdi-broom:before{content:"\F00E2"}.mdi-brush:before{content:"\F00E3"}.mdi-bucket:before{content:"\F1415"}.mdi-bucket-outline:before{content:"\F1416"}.mdi-buddhism:before{content:"\F094B"}.mdi-buffer:before{content:"\F0619"}.mdi-buffet:before{content:"\F0578"}.mdi-bug:before{content:"\F00E4"}.mdi-bug-check:before{content:"\F0A2E"}.mdi-bug-check-outline:before{content:"\F0A2F"}.mdi-bug-outline:before{content:"\F0A30"}.mdi-bugle:before{content:"\F0DB4"}.mdi-bulldozer:before{content:"\F0B22"}.mdi-bullet:before{content:"\F0CF3"}.mdi-bulletin-board:before{content:"\F00E5"}.mdi-bullhorn:before{content:"\F00E6"}.mdi-bullhorn-outline:before{content:"\F0B23"}.mdi-bullseye:before{content:"\F05DD"}.mdi-bullseye-arrow:before{content:"\F08C9"}.mdi-bulma:before{content:"\F12E7"}.mdi-bunk-bed:before{content:"\F1302"}.mdi-bunk-bed-outline:before{content:"\F0097"}.mdi-bus:before{content:"\F00E7"}.mdi-bus-alert:before{content:"\F0A99"}.mdi-bus-articulated-end:before{content:"\F079C"}.mdi-bus-articulated-front:before{content:"\F079D"}.mdi-bus-clock:before{content:"\F08CA"}.mdi-bus-double-decker:before{content:"\F079E"}.mdi-bus-marker:before{content:"\F1212"}.mdi-bus-multiple:before{content:"\F0F3F"}.mdi-bus-school:before{content:"\F079F"}.mdi-bus-side:before{content:"\F07A0"}.mdi-bus-stop:before{content:"\F1012"}.mdi-bus-stop-covered:before{content:"\F1013"}.mdi-bus-stop-uncovered:before{content:"\F1014"}.mdi-butterfly:before{content:"\F1589"}.mdi-butterfly-outline:before{content:"\F158A"}.mdi-cable-data:before{content:"\F1394"}.mdi-cached:before{content:"\F00E8"}.mdi-cactus:before{content:"\F0DB5"}.mdi-cake:before{content:"\F00E9"}.mdi-cake-layered:before{content:"\F00EA"}.mdi-cake-variant:before{content:"\F00EB"}.mdi-calculator:before{content:"\F00EC"}.mdi-calculator-variant:before{content:"\F0A9A"}.mdi-calculator-variant-outline:before{content:"\F15A6"}.mdi-calendar:before{content:"\F00ED"}.mdi-calendar-account:before{content:"\F0ED7"}.mdi-calendar-account-outline:before{content:"\F0ED8"}.mdi-calendar-alert:before{content:"\F0A31"}.mdi-calendar-arrow-left:before{content:"\F1134"}.mdi-calendar-arrow-right:before{content:"\F1135"}.mdi-calendar-blank:before{content:"\F00EE"}.mdi-calendar-blank-multiple:before{content:"\F1073"}.mdi-calendar-blank-outline:before{content:"\F0B66"}.mdi-calendar-check:before{content:"\F00EF"}.mdi-calendar-check-outline:before{content:"\F0C44"}.mdi-calendar-clock:before{content:"\F00F0"}.mdi-calendar-clock-outline:before{content:"\F16E1"}.mdi-calendar-cursor:before{content:"\F157B"}.mdi-calendar-edit:before{content:"\F08A7"}.mdi-calendar-end:before{content:"\F166C"}.mdi-calendar-export:before{content:"\F0B24"}.mdi-calendar-heart:before{content:"\F09D2"}.mdi-calendar-import:before{content:"\F0B25"}.mdi-calendar-lock:before{content:"\F1641"}.mdi-calendar-lock-outline:before{content:"\F1642"}.mdi-calendar-minus:before{content:"\F0D5C"}.mdi-calendar-month:before{content:"\F0E17"}.mdi-calendar-month-outline:before{content:"\F0E18"}.mdi-calendar-multiple:before{content:"\F00F1"}.mdi-calendar-multiple-check:before{content:"\F00F2"}.mdi-calendar-multiselect:before{content:"\F0A32"}.mdi-calendar-outline:before{content:"\F0B67"}.mdi-calendar-plus:before{content:"\F00F3"}.mdi-calendar-question:before{content:"\F0692"}.mdi-calendar-range:before{content:"\F0679"}.mdi-calendar-range-outline:before{content:"\F0B68"}.mdi-calendar-refresh:before{content:"\F01E1"}.mdi-calendar-refresh-outline:before{content:"\F0203"}.mdi-calendar-remove:before{content:"\F00F4"}.mdi-calendar-remove-outline:before{content:"\F0C45"}.mdi-calendar-search:before{content:"\F094C"}.mdi-calendar-star:before{content:"\F09D3"}.mdi-calendar-start:before{content:"\F166D"}.mdi-calendar-sync:before{content:"\F0E8E"}.mdi-calendar-sync-outline:before{content:"\F0E8F"}.mdi-calendar-text:before{content:"\F00F5"}.mdi-calendar-text-outline:before{content:"\F0C46"}.mdi-calendar-today:before{content:"\F00F6"}.mdi-calendar-week:before{content:"\F0A33"}.mdi-calendar-week-begin:before{content:"\F0A34"}.mdi-calendar-weekend:before{content:"\F0ED9"}.mdi-calendar-weekend-outline:before{content:"\F0EDA"}.mdi-call-made:before{content:"\F00F7"}.mdi-call-merge:before{content:"\F00F8"}.mdi-call-missed:before{content:"\F00F9"}.mdi-call-received:before{content:"\F00FA"}.mdi-call-split:before{content:"\F00FB"}.mdi-camcorder:before{content:"\F00FC"}.mdi-camcorder-off:before{content:"\F00FF"}.mdi-camera:before{content:"\F0100"}.mdi-camera-account:before{content:"\F08CB"}.mdi-camera-burst:before{content:"\F0693"}.mdi-camera-control:before{content:"\F0B69"}.mdi-camera-enhance:before{content:"\F0101"}.mdi-camera-enhance-outline:before{content:"\F0B6A"}.mdi-camera-flip:before{content:"\F15D9"}.mdi-camera-flip-outline:before{content:"\F15DA"}.mdi-camera-front:before{content:"\F0102"}.mdi-camera-front-variant:before{content:"\F0103"}.mdi-camera-gopro:before{content:"\F07A1"}.mdi-camera-image:before{content:"\F08CC"}.mdi-camera-iris:before{content:"\F0104"}.mdi-camera-metering-center:before{content:"\F07A2"}.mdi-camera-metering-matrix:before{content:"\F07A3"}.mdi-camera-metering-partial:before{content:"\F07A4"}.mdi-camera-metering-spot:before{content:"\F07A5"}.mdi-camera-off:before{content:"\F05DF"}.mdi-camera-outline:before{content:"\F0D5D"}.mdi-camera-party-mode:before{content:"\F0105"}.mdi-camera-plus:before{content:"\F0EDB"}.mdi-camera-plus-outline:before{content:"\F0EDC"}.mdi-camera-rear:before{content:"\F0106"}.mdi-camera-rear-variant:before{content:"\F0107"}.mdi-camera-retake:before{content:"\F0E19"}.mdi-camera-retake-outline:before{content:"\F0E1A"}.mdi-camera-switch:before{content:"\F0108"}.mdi-camera-switch-outline:before{content:"\F084A"}.mdi-camera-timer:before{content:"\F0109"}.mdi-camera-wireless:before{content:"\F0DB6"}.mdi-camera-wireless-outline:before{content:"\F0DB7"}.mdi-campfire:before{content:"\F0EDD"}.mdi-cancel:before{content:"\F073A"}.mdi-candle:before{content:"\F05E2"}.mdi-candycane:before{content:"\F010A"}.mdi-cannabis:before{content:"\F07A6"}.mdi-cannabis-off:before{content:"\F166E"}.mdi-caps-lock:before{content:"\F0A9B"}.mdi-car:before{content:"\F010B"}.mdi-car-2-plus:before{content:"\F1015"}.mdi-car-3-plus:before{content:"\F1016"}.mdi-car-arrow-left:before{content:"\F13B2"}.mdi-car-arrow-right:before{content:"\F13B3"}.mdi-car-back:before{content:"\F0E1B"}.mdi-car-battery:before{content:"\F010C"}.mdi-car-brake-abs:before{content:"\F0C47"}.mdi-car-brake-alert:before{content:"\F0C48"}.mdi-car-brake-hold:before{content:"\F0D5E"}.mdi-car-brake-parking:before{content:"\F0D5F"}.mdi-car-brake-retarder:before{content:"\F1017"}.mdi-car-child-seat:before{content:"\F0FA3"}.mdi-car-clutch:before{content:"\F1018"}.mdi-car-cog:before{content:"\F13CC"}.mdi-car-connected:before{content:"\F010D"}.mdi-car-convertible:before{content:"\F07A7"}.mdi-car-coolant-level:before{content:"\F1019"}.mdi-car-cruise-control:before{content:"\F0D60"}.mdi-car-defrost-front:before{content:"\F0D61"}.mdi-car-defrost-rear:before{content:"\F0D62"}.mdi-car-door:before{content:"\F0B6B"}.mdi-car-door-lock:before{content:"\F109D"}.mdi-car-electric:before{content:"\F0B6C"}.mdi-car-electric-outline:before{content:"\F15B5"}.mdi-car-emergency:before{content:"\F160F"}.mdi-car-esp:before{content:"\F0C49"}.mdi-car-estate:before{content:"\F07A8"}.mdi-car-hatchback:before{content:"\F07A9"}.mdi-car-info:before{content:"\F11BE"}.mdi-car-key:before{content:"\F0B6D"}.mdi-car-lifted-pickup:before{content:"\F152D"}.mdi-car-light-dimmed:before{content:"\F0C4A"}.mdi-car-light-fog:before{content:"\F0C4B"}.mdi-car-light-high:before{content:"\F0C4C"}.mdi-car-limousine:before{content:"\F08CD"}.mdi-car-multiple:before{content:"\F0B6E"}.mdi-car-off:before{content:"\F0E1C"}.mdi-car-outline:before{content:"\F14ED"}.mdi-car-parking-lights:before{content:"\F0D63"}.mdi-car-pickup:before{content:"\F07AA"}.mdi-car-seat:before{content:"\F0FA4"}.mdi-car-seat-cooler:before{content:"\F0FA5"}.mdi-car-seat-heater:before{content:"\F0FA6"}.mdi-car-settings:before{content:"\F13CD"}.mdi-car-shift-pattern:before{content:"\F0F40"}.mdi-car-side:before{content:"\F07AB"}.mdi-car-sports:before{content:"\F07AC"}.mdi-car-tire-alert:before{content:"\F0C4D"}.mdi-car-traction-control:before{content:"\F0D64"}.mdi-car-turbocharger:before{content:"\F101A"}.mdi-car-wash:before{content:"\F010E"}.mdi-car-windshield:before{content:"\F101B"}.mdi-car-windshield-outline:before{content:"\F101C"}.mdi-carabiner:before{content:"\F14C0"}.mdi-caravan:before{content:"\F07AD"}.mdi-card:before{content:"\F0B6F"}.mdi-card-account-details:before{content:"\F05D2"}.mdi-card-account-details-outline:before{content:"\F0DAB"}.mdi-card-account-details-star:before{content:"\F02A3"}.mdi-card-account-details-star-outline:before{content:"\F06DB"}.mdi-card-account-mail:before{content:"\F018E"}.mdi-card-account-mail-outline:before{content:"\F0E98"}.mdi-card-account-phone:before{content:"\F0E99"}.mdi-card-account-phone-outline:before{content:"\F0E9A"}.mdi-card-bulleted:before{content:"\F0B70"}.mdi-card-bulleted-off:before{content:"\F0B71"}.mdi-card-bulleted-off-outline:before{content:"\F0B72"}.mdi-card-bulleted-outline:before{content:"\F0B73"}.mdi-card-bulleted-settings:before{content:"\F0B74"}.mdi-card-bulleted-settings-outline:before{content:"\F0B75"}.mdi-card-minus:before{content:"\F1600"}.mdi-card-minus-outline:before{content:"\F1601"}.mdi-card-off:before{content:"\F1602"}.mdi-card-off-outline:before{content:"\F1603"}.mdi-card-outline:before{content:"\F0B76"}.mdi-card-plus:before{content:"\F11FF"}.mdi-card-plus-outline:before{content:"\F1200"}.mdi-card-remove:before{content:"\F1604"}.mdi-card-remove-outline:before{content:"\F1605"}.mdi-card-search:before{content:"\F1074"}.mdi-card-search-outline:before{content:"\F1075"}.mdi-card-text:before{content:"\F0B77"}.mdi-card-text-outline:before{content:"\F0B78"}.mdi-cards:before{content:"\F0638"}.mdi-cards-club:before{content:"\F08CE"}.mdi-cards-diamond:before{content:"\F08CF"}.mdi-cards-diamond-outline:before{content:"\F101D"}.mdi-cards-heart:before{content:"\F08D0"}.mdi-cards-outline:before{content:"\F0639"}.mdi-cards-playing-outline:before{content:"\F063A"}.mdi-cards-spade:before{content:"\F08D1"}.mdi-cards-variant:before{content:"\F06C7"}.mdi-carrot:before{content:"\F010F"}.mdi-cart:before{content:"\F0110"}.mdi-cart-arrow-down:before{content:"\F0D66"}.mdi-cart-arrow-right:before{content:"\F0C4E"}.mdi-cart-arrow-up:before{content:"\F0D67"}.mdi-cart-check:before{content:"\F15EA"}.mdi-cart-minus:before{content:"\F0D68"}.mdi-cart-off:before{content:"\F066B"}.mdi-cart-outline:before{content:"\F0111"}.mdi-cart-plus:before{content:"\F0112"}.mdi-cart-remove:before{content:"\F0D69"}.mdi-cart-variant:before{content:"\F15EB"}.mdi-case-sensitive-alt:before{content:"\F0113"}.mdi-cash:before{content:"\F0114"}.mdi-cash-100:before{content:"\F0115"}.mdi-cash-check:before{content:"\F14EE"}.mdi-cash-lock:before{content:"\F14EA"}.mdi-cash-lock-open:before{content:"\F14EB"}.mdi-cash-marker:before{content:"\F0DB8"}.mdi-cash-minus:before{content:"\F1260"}.mdi-cash-multiple:before{content:"\F0116"}.mdi-cash-plus:before{content:"\F1261"}.mdi-cash-refund:before{content:"\F0A9C"}.mdi-cash-register:before{content:"\F0CF4"}.mdi-cash-remove:before{content:"\F1262"}.mdi-cash-usd:before{content:"\F1176"}.mdi-cash-usd-outline:before{content:"\F0117"}.mdi-cassette:before{content:"\F09D4"}.mdi-cast:before{content:"\F0118"}.mdi-cast-audio:before{content:"\F101E"}.mdi-cast-connected:before{content:"\F0119"}.mdi-cast-education:before{content:"\F0E1D"}.mdi-cast-off:before{content:"\F078A"}.mdi-castle:before{content:"\F011A"}.mdi-cat:before{content:"\F011B"}.mdi-cctv:before{content:"\F07AE"}.mdi-ceiling-light:before{content:"\F0769"}.mdi-cellphone:before{content:"\F011C"}.mdi-cellphone-android:before{content:"\F011D"}.mdi-cellphone-arrow-down:before{content:"\F09D5"}.mdi-cellphone-basic:before{content:"\F011E"}.mdi-cellphone-charging:before{content:"\F1397"}.mdi-cellphone-cog:before{content:"\F0951"}.mdi-cellphone-dock:before{content:"\F011F"}.mdi-cellphone-erase:before{content:"\F094D"}.mdi-cellphone-information:before{content:"\F0F41"}.mdi-cellphone-iphone:before{content:"\F0120"}.mdi-cellphone-key:before{content:"\F094E"}.mdi-cellphone-link:before{content:"\F0121"}.mdi-cellphone-link-off:before{content:"\F0122"}.mdi-cellphone-lock:before{content:"\F094F"}.mdi-cellphone-message:before{content:"\F08D3"}.mdi-cellphone-message-off:before{content:"\F10D2"}.mdi-cellphone-nfc:before{content:"\F0E90"}.mdi-cellphone-nfc-off:before{content:"\F12D8"}.mdi-cellphone-off:before{content:"\F0950"}.mdi-cellphone-play:before{content:"\F101F"}.mdi-cellphone-screenshot:before{content:"\F0A35"}.mdi-cellphone-settings:before{content:"\F0123"}.mdi-cellphone-sound:before{content:"\F0952"}.mdi-cellphone-text:before{content:"\F08D2"}.mdi-cellphone-wireless:before{content:"\F0815"}.mdi-celtic-cross:before{content:"\F0CF5"}.mdi-centos:before{content:"\F111A"}.mdi-certificate:before{content:"\F0124"}.mdi-certificate-outline:before{content:"\F1188"}.mdi-chair-rolling:before{content:"\F0F48"}.mdi-chair-school:before{content:"\F0125"}.mdi-charity:before{content:"\F0C4F"}.mdi-chart-arc:before{content:"\F0126"}.mdi-chart-areaspline:before{content:"\F0127"}.mdi-chart-areaspline-variant:before{content:"\F0E91"}.mdi-chart-bar:before{content:"\F0128"}.mdi-chart-bar-stacked:before{content:"\F076A"}.mdi-chart-bell-curve:before{content:"\F0C50"}.mdi-chart-bell-curve-cumulative:before{content:"\F0FA7"}.mdi-chart-box:before{content:"\F154D"}.mdi-chart-box-outline:before{content:"\F154E"}.mdi-chart-box-plus-outline:before{content:"\F154F"}.mdi-chart-bubble:before{content:"\F05E3"}.mdi-chart-donut:before{content:"\F07AF"}.mdi-chart-donut-variant:before{content:"\F07B0"}.mdi-chart-gantt:before{content:"\F066C"}.mdi-chart-histogram:before{content:"\F0129"}.mdi-chart-line:before{content:"\F012A"}.mdi-chart-line-stacked:before{content:"\F076B"}.mdi-chart-line-variant:before{content:"\F07B1"}.mdi-chart-multiline:before{content:"\F08D4"}.mdi-chart-multiple:before{content:"\F1213"}.mdi-chart-pie:before{content:"\F012B"}.mdi-chart-ppf:before{content:"\F1380"}.mdi-chart-sankey:before{content:"\F11DF"}.mdi-chart-sankey-variant:before{content:"\F11E0"}.mdi-chart-scatter-plot:before{content:"\F0E92"}.mdi-chart-scatter-plot-hexbin:before{content:"\F066D"}.mdi-chart-timeline:before{content:"\F066E"}.mdi-chart-timeline-variant:before{content:"\F0E93"}.mdi-chart-timeline-variant-shimmer:before{content:"\F15B6"}.mdi-chart-tree:before{content:"\F0E94"}.mdi-chat:before{content:"\F0B79"}.mdi-chat-alert:before{content:"\F0B7A"}.mdi-chat-alert-outline:before{content:"\F12C9"}.mdi-chat-minus:before{content:"\F1410"}.mdi-chat-minus-outline:before{content:"\F1413"}.mdi-chat-outline:before{content:"\F0EDE"}.mdi-chat-plus:before{content:"\F140F"}.mdi-chat-plus-outline:before{content:"\F1412"}.mdi-chat-processing:before{content:"\F0B7B"}.mdi-chat-processing-outline:before{content:"\F12CA"}.mdi-chat-question:before{content:"\F1738"}.mdi-chat-question-outline:before{content:"\F1739"}.mdi-chat-remove:before{content:"\F1411"}.mdi-chat-remove-outline:before{content:"\F1414"}.mdi-chat-sleep:before{content:"\F12D1"}.mdi-chat-sleep-outline:before{content:"\F12D2"}.mdi-check:before{content:"\F012C"}.mdi-check-all:before{content:"\F012D"}.mdi-check-bold:before{content:"\F0E1E"}.mdi-check-box-multiple-outline:before{content:"\F0C51"}.mdi-check-box-outline:before{content:"\F0C52"}.mdi-check-circle:before{content:"\F05E0"}.mdi-check-circle-outline:before{content:"\F05E1"}.mdi-check-decagram:before{content:"\F0791"}.mdi-check-decagram-outline:before{content:"\F1740"}.mdi-check-network:before{content:"\F0C53"}.mdi-check-network-outline:before{content:"\F0C54"}.mdi-check-outline:before{content:"\F0855"}.mdi-check-underline:before{content:"\F0E1F"}.mdi-check-underline-circle:before{content:"\F0E20"}.mdi-check-underline-circle-outline:before{content:"\F0E21"}.mdi-checkbook:before{content:"\F0A9D"}.mdi-checkbox-blank:before{content:"\F012E"}.mdi-checkbox-blank-circle:before{content:"\F012F"}.mdi-checkbox-blank-circle-outline:before{content:"\F0130"}.mdi-checkbox-blank-off:before{content:"\F12EC"}.mdi-checkbox-blank-off-outline:before{content:"\F12ED"}.mdi-checkbox-blank-outline:before{content:"\F0131"}.mdi-checkbox-intermediate:before{content:"\F0856"}.mdi-checkbox-marked:before{content:"\F0132"}.mdi-checkbox-marked-circle:before{content:"\F0133"}.mdi-checkbox-marked-circle-outline:before{content:"\F0134"}.mdi-checkbox-marked-outline:before{content:"\F0135"}.mdi-checkbox-multiple-blank:before{content:"\F0136"}.mdi-checkbox-multiple-blank-circle:before{content:"\F063B"}.mdi-checkbox-multiple-blank-circle-outline:before{content:"\F063C"}.mdi-checkbox-multiple-blank-outline:before{content:"\F0137"}.mdi-checkbox-multiple-marked:before{content:"\F0138"}.mdi-checkbox-multiple-marked-circle:before{content:"\F063D"}.mdi-checkbox-multiple-marked-circle-outline:before{content:"\F063E"}.mdi-checkbox-multiple-marked-outline:before{content:"\F0139"}.mdi-checkerboard:before{content:"\F013A"}.mdi-checkerboard-minus:before{content:"\F1202"}.mdi-checkerboard-plus:before{content:"\F1201"}.mdi-checkerboard-remove:before{content:"\F1203"}.mdi-cheese:before{content:"\F12B9"}.mdi-cheese-off:before{content:"\F13EE"}.mdi-chef-hat:before{content:"\F0B7C"}.mdi-chemical-weapon:before{content:"\F013B"}.mdi-chess-bishop:before{content:"\F085C"}.mdi-chess-king:before{content:"\F0857"}.mdi-chess-knight:before{content:"\F0858"}.mdi-chess-pawn:before{content:"\F0859"}.mdi-chess-queen:before{content:"\F085A"}.mdi-chess-rook:before{content:"\F085B"}.mdi-chevron-double-down:before{content:"\F013C"}.mdi-chevron-double-left:before{content:"\F013D"}.mdi-chevron-double-right:before{content:"\F013E"}.mdi-chevron-double-up:before{content:"\F013F"}.mdi-chevron-down:before{content:"\F0140"}.mdi-chevron-down-box:before{content:"\F09D6"}.mdi-chevron-down-box-outline:before{content:"\F09D7"}.mdi-chevron-down-circle:before{content:"\F0B26"}.mdi-chevron-down-circle-outline:before{content:"\F0B27"}.mdi-chevron-left:before{content:"\F0141"}.mdi-chevron-left-box:before{content:"\F09D8"}.mdi-chevron-left-box-outline:before{content:"\F09D9"}.mdi-chevron-left-circle:before{content:"\F0B28"}.mdi-chevron-left-circle-outline:before{content:"\F0B29"}.mdi-chevron-right:before{content:"\F0142"}.mdi-chevron-right-box:before{content:"\F09DA"}.mdi-chevron-right-box-outline:before{content:"\F09DB"}.mdi-chevron-right-circle:before{content:"\F0B2A"}.mdi-chevron-right-circle-outline:before{content:"\F0B2B"}.mdi-chevron-triple-down:before{content:"\F0DB9"}.mdi-chevron-triple-left:before{content:"\F0DBA"}.mdi-chevron-triple-right:before{content:"\F0DBB"}.mdi-chevron-triple-up:before{content:"\F0DBC"}.mdi-chevron-up:before{content:"\F0143"}.mdi-chevron-up-box:before{content:"\F09DC"}.mdi-chevron-up-box-outline:before{content:"\F09DD"}.mdi-chevron-up-circle:before{content:"\F0B2C"}.mdi-chevron-up-circle-outline:before{content:"\F0B2D"}.mdi-chili-hot:before{content:"\F07B2"}.mdi-chili-medium:before{content:"\F07B3"}.mdi-chili-mild:before{content:"\F07B4"}.mdi-chili-off:before{content:"\F1467"}.mdi-chip:before{content:"\F061A"}.mdi-christianity:before{content:"\F0953"}.mdi-christianity-outline:before{content:"\F0CF6"}.mdi-church:before{content:"\F0144"}.mdi-cigar:before{content:"\F1189"}.mdi-cigar-off:before{content:"\F141B"}.mdi-circle:before{content:"\F0765"}.mdi-circle-box:before{content:"\F15DC"}.mdi-circle-box-outline:before{content:"\F15DD"}.mdi-circle-double:before{content:"\F0E95"}.mdi-circle-edit-outline:before{content:"\F08D5"}.mdi-circle-expand:before{content:"\F0E96"}.mdi-circle-half:before{content:"\F1395"}.mdi-circle-half-full:before{content:"\F1396"}.mdi-circle-medium:before{content:"\F09DE"}.mdi-circle-multiple:before{content:"\F0B38"}.mdi-circle-multiple-outline:before{content:"\F0695"}.mdi-circle-off-outline:before{content:"\F10D3"}.mdi-circle-outline:before{content:"\F0766"}.mdi-circle-slice-1:before{content:"\F0A9E"}.mdi-circle-slice-2:before{content:"\F0A9F"}.mdi-circle-slice-3:before{content:"\F0AA0"}.mdi-circle-slice-4:before{content:"\F0AA1"}.mdi-circle-slice-5:before{content:"\F0AA2"}.mdi-circle-slice-6:before{content:"\F0AA3"}.mdi-circle-slice-7:before{content:"\F0AA4"}.mdi-circle-slice-8:before{content:"\F0AA5"}.mdi-circle-small:before{content:"\F09DF"}.mdi-circular-saw:before{content:"\F0E22"}.mdi-city:before{content:"\F0146"}.mdi-city-variant:before{content:"\F0A36"}.mdi-city-variant-outline:before{content:"\F0A37"}.mdi-clipboard:before{content:"\F0147"}.mdi-clipboard-account:before{content:"\F0148"}.mdi-clipboard-account-outline:before{content:"\F0C55"}.mdi-clipboard-alert:before{content:"\F0149"}.mdi-clipboard-alert-outline:before{content:"\F0CF7"}.mdi-clipboard-arrow-down:before{content:"\F014A"}.mdi-clipboard-arrow-down-outline:before{content:"\F0C56"}.mdi-clipboard-arrow-left:before{content:"\F014B"}.mdi-clipboard-arrow-left-outline:before{content:"\F0CF8"}.mdi-clipboard-arrow-right:before{content:"\F0CF9"}.mdi-clipboard-arrow-right-outline:before{content:"\F0CFA"}.mdi-clipboard-arrow-up:before{content:"\F0C57"}.mdi-clipboard-arrow-up-outline:before{content:"\F0C58"}.mdi-clipboard-check:before{content:"\F014E"}.mdi-clipboard-check-multiple:before{content:"\F1263"}.mdi-clipboard-check-multiple-outline:before{content:"\F1264"}.mdi-clipboard-check-outline:before{content:"\F08A8"}.mdi-clipboard-clock:before{content:"\F16E2"}.mdi-clipboard-clock-outline:before{content:"\F16E3"}.mdi-clipboard-edit:before{content:"\F14E5"}.mdi-clipboard-edit-outline:before{content:"\F14E6"}.mdi-clipboard-file:before{content:"\F1265"}.mdi-clipboard-file-outline:before{content:"\F1266"}.mdi-clipboard-flow:before{content:"\F06C8"}.mdi-clipboard-flow-outline:before{content:"\F1117"}.mdi-clipboard-list:before{content:"\F10D4"}.mdi-clipboard-list-outline:before{content:"\F10D5"}.mdi-clipboard-minus:before{content:"\F1618"}.mdi-clipboard-minus-outline:before{content:"\F1619"}.mdi-clipboard-multiple:before{content:"\F1267"}.mdi-clipboard-multiple-outline:before{content:"\F1268"}.mdi-clipboard-off:before{content:"\F161A"}.mdi-clipboard-off-outline:before{content:"\F161B"}.mdi-clipboard-outline:before{content:"\F014C"}.mdi-clipboard-play:before{content:"\F0C59"}.mdi-clipboard-play-multiple:before{content:"\F1269"}.mdi-clipboard-play-multiple-outline:before{content:"\F126A"}.mdi-clipboard-play-outline:before{content:"\F0C5A"}.mdi-clipboard-plus:before{content:"\F0751"}.mdi-clipboard-plus-outline:before{content:"\F131F"}.mdi-clipboard-pulse:before{content:"\F085D"}.mdi-clipboard-pulse-outline:before{content:"\F085E"}.mdi-clipboard-remove:before{content:"\F161C"}.mdi-clipboard-remove-outline:before{content:"\F161D"}.mdi-clipboard-search:before{content:"\F161E"}.mdi-clipboard-search-outline:before{content:"\F161F"}.mdi-clipboard-text:before{content:"\F014D"}.mdi-clipboard-text-multiple:before{content:"\F126B"}.mdi-clipboard-text-multiple-outline:before{content:"\F126C"}.mdi-clipboard-text-off:before{content:"\F1620"}.mdi-clipboard-text-off-outline:before{content:"\F1621"}.mdi-clipboard-text-outline:before{content:"\F0A38"}.mdi-clipboard-text-play:before{content:"\F0C5B"}.mdi-clipboard-text-play-outline:before{content:"\F0C5C"}.mdi-clipboard-text-search:before{content:"\F1622"}.mdi-clipboard-text-search-outline:before{content:"\F1623"}.mdi-clippy:before{content:"\F014F"}.mdi-clock:before{content:"\F0954"}.mdi-clock-alert:before{content:"\F0955"}.mdi-clock-alert-outline:before{content:"\F05CE"}.mdi-clock-check:before{content:"\F0FA8"}.mdi-clock-check-outline:before{content:"\F0FA9"}.mdi-clock-digital:before{content:"\F0E97"}.mdi-clock-end:before{content:"\F0151"}.mdi-clock-fast:before{content:"\F0152"}.mdi-clock-in:before{content:"\F0153"}.mdi-clock-out:before{content:"\F0154"}.mdi-clock-outline:before{content:"\F0150"}.mdi-clock-start:before{content:"\F0155"}.mdi-clock-time-eight:before{content:"\F1446"}.mdi-clock-time-eight-outline:before{content:"\F1452"}.mdi-clock-time-eleven:before{content:"\F1449"}.mdi-clock-time-eleven-outline:before{content:"\F1455"}.mdi-clock-time-five:before{content:"\F1443"}.mdi-clock-time-five-outline:before{content:"\F144F"}.mdi-clock-time-four:before{content:"\F1442"}.mdi-clock-time-four-outline:before{content:"\F144E"}.mdi-clock-time-nine:before{content:"\F1447"}.mdi-clock-time-nine-outline:before{content:"\F1453"}.mdi-clock-time-one:before{content:"\F143F"}.mdi-clock-time-one-outline:before{content:"\F144B"}.mdi-clock-time-seven:before{content:"\F1445"}.mdi-clock-time-seven-outline:before{content:"\F1451"}.mdi-clock-time-six:before{content:"\F1444"}.mdi-clock-time-six-outline:before{content:"\F1450"}.mdi-clock-time-ten:before{content:"\F1448"}.mdi-clock-time-ten-outline:before{content:"\F1454"}.mdi-clock-time-three:before{content:"\F1441"}.mdi-clock-time-three-outline:before{content:"\F144D"}.mdi-clock-time-twelve:before{content:"\F144A"}.mdi-clock-time-twelve-outline:before{content:"\F1456"}.mdi-clock-time-two:before{content:"\F1440"}.mdi-clock-time-two-outline:before{content:"\F144C"}.mdi-close:before{content:"\F0156"}.mdi-close-box:before{content:"\F0157"}.mdi-close-box-multiple:before{content:"\F0C5D"}.mdi-close-box-multiple-outline:before{content:"\F0C5E"}.mdi-close-box-outline:before{content:"\F0158"}.mdi-close-circle:before{content:"\F0159"}.mdi-close-circle-multiple:before{content:"\F062A"}.mdi-close-circle-multiple-outline:before{content:"\F0883"}.mdi-close-circle-outline:before{content:"\F015A"}.mdi-close-network:before{content:"\F015B"}.mdi-close-network-outline:before{content:"\F0C5F"}.mdi-close-octagon:before{content:"\F015C"}.mdi-close-octagon-outline:before{content:"\F015D"}.mdi-close-outline:before{content:"\F06C9"}.mdi-close-thick:before{content:"\F1398"}.mdi-closed-caption:before{content:"\F015E"}.mdi-closed-caption-outline:before{content:"\F0DBD"}.mdi-cloud:before{content:"\F015F"}.mdi-cloud-alert:before{content:"\F09E0"}.mdi-cloud-braces:before{content:"\F07B5"}.mdi-cloud-check:before{content:"\F0160"}.mdi-cloud-check-outline:before{content:"\F12CC"}.mdi-cloud-circle:before{content:"\F0161"}.mdi-cloud-download:before{content:"\F0162"}.mdi-cloud-download-outline:before{content:"\F0B7D"}.mdi-cloud-lock:before{content:"\F11F1"}.mdi-cloud-lock-outline:before{content:"\F11F2"}.mdi-cloud-off-outline:before{content:"\F0164"}.mdi-cloud-outline:before{content:"\F0163"}.mdi-cloud-print:before{content:"\F0165"}.mdi-cloud-print-outline:before{content:"\F0166"}.mdi-cloud-question:before{content:"\F0A39"}.mdi-cloud-refresh:before{content:"\F052A"}.mdi-cloud-search:before{content:"\F0956"}.mdi-cloud-search-outline:before{content:"\F0957"}.mdi-cloud-sync:before{content:"\F063F"}.mdi-cloud-sync-outline:before{content:"\F12D6"}.mdi-cloud-tags:before{content:"\F07B6"}.mdi-cloud-upload:before{content:"\F0167"}.mdi-cloud-upload-outline:before{content:"\F0B7E"}.mdi-clover:before{content:"\F0816"}.mdi-coach-lamp:before{content:"\F1020"}.mdi-coat-rack:before{content:"\F109E"}.mdi-code-array:before{content:"\F0168"}.mdi-code-braces:before{content:"\F0169"}.mdi-code-braces-box:before{content:"\F10D6"}.mdi-code-brackets:before{content:"\F016A"}.mdi-code-equal:before{content:"\F016B"}.mdi-code-greater-than:before{content:"\F016C"}.mdi-code-greater-than-or-equal:before{content:"\F016D"}.mdi-code-json:before{content:"\F0626"}.mdi-code-less-than:before{content:"\F016E"}.mdi-code-less-than-or-equal:before{content:"\F016F"}.mdi-code-not-equal:before{content:"\F0170"}.mdi-code-not-equal-variant:before{content:"\F0171"}.mdi-code-parentheses:before{content:"\F0172"}.mdi-code-parentheses-box:before{content:"\F10D7"}.mdi-code-string:before{content:"\F0173"}.mdi-code-tags:before{content:"\F0174"}.mdi-code-tags-check:before{content:"\F0694"}.mdi-codepen:before{content:"\F0175"}.mdi-coffee:before{content:"\F0176"}.mdi-coffee-maker:before{content:"\F109F"}.mdi-coffee-off:before{content:"\F0FAA"}.mdi-coffee-off-outline:before{content:"\F0FAB"}.mdi-coffee-outline:before{content:"\F06CA"}.mdi-coffee-to-go:before{content:"\F0177"}.mdi-coffee-to-go-outline:before{content:"\F130E"}.mdi-coffin:before{content:"\F0B7F"}.mdi-cog:before{content:"\F0493"}.mdi-cog-box:before{content:"\F0494"}.mdi-cog-clockwise:before{content:"\F11DD"}.mdi-cog-counterclockwise:before{content:"\F11DE"}.mdi-cog-off:before{content:"\F13CE"}.mdi-cog-off-outline:before{content:"\F13CF"}.mdi-cog-outline:before{content:"\F08BB"}.mdi-cog-refresh:before{content:"\F145E"}.mdi-cog-refresh-outline:before{content:"\F145F"}.mdi-cog-sync:before{content:"\F1460"}.mdi-cog-sync-outline:before{content:"\F1461"}.mdi-cog-transfer:before{content:"\F105B"}.mdi-cog-transfer-outline:before{content:"\F105C"}.mdi-cogs:before{content:"\F08D6"}.mdi-collage:before{content:"\F0640"}.mdi-collapse-all:before{content:"\F0AA6"}.mdi-collapse-all-outline:before{content:"\F0AA7"}.mdi-color-helper:before{content:"\F0179"}.mdi-comma:before{content:"\F0E23"}.mdi-comma-box:before{content:"\F0E2B"}.mdi-comma-box-outline:before{content:"\F0E24"}.mdi-comma-circle:before{content:"\F0E25"}.mdi-comma-circle-outline:before{content:"\F0E26"}.mdi-comment:before{content:"\F017A"}.mdi-comment-account:before{content:"\F017B"}.mdi-comment-account-outline:before{content:"\F017C"}.mdi-comment-alert:before{content:"\F017D"}.mdi-comment-alert-outline:before{content:"\F017E"}.mdi-comment-arrow-left:before{content:"\F09E1"}.mdi-comment-arrow-left-outline:before{content:"\F09E2"}.mdi-comment-arrow-right:before{content:"\F09E3"}.mdi-comment-arrow-right-outline:before{content:"\F09E4"}.mdi-comment-bookmark:before{content:"\F15AE"}.mdi-comment-bookmark-outline:before{content:"\F15AF"}.mdi-comment-check:before{content:"\F017F"}.mdi-comment-check-outline:before{content:"\F0180"}.mdi-comment-edit:before{content:"\F11BF"}.mdi-comment-edit-outline:before{content:"\F12C4"}.mdi-comment-eye:before{content:"\F0A3A"}.mdi-comment-eye-outline:before{content:"\F0A3B"}.mdi-comment-flash:before{content:"\F15B0"}.mdi-comment-flash-outline:before{content:"\F15B1"}.mdi-comment-minus:before{content:"\F15DF"}.mdi-comment-minus-outline:before{content:"\F15E0"}.mdi-comment-multiple:before{content:"\F085F"}.mdi-comment-multiple-outline:before{content:"\F0181"}.mdi-comment-off:before{content:"\F15E1"}.mdi-comment-off-outline:before{content:"\F15E2"}.mdi-comment-outline:before{content:"\F0182"}.mdi-comment-plus:before{content:"\F09E5"}.mdi-comment-plus-outline:before{content:"\F0183"}.mdi-comment-processing:before{content:"\F0184"}.mdi-comment-processing-outline:before{content:"\F0185"}.mdi-comment-question:before{content:"\F0817"}.mdi-comment-question-outline:before{content:"\F0186"}.mdi-comment-quote:before{content:"\F1021"}.mdi-comment-quote-outline:before{content:"\F1022"}.mdi-comment-remove:before{content:"\F05DE"}.mdi-comment-remove-outline:before{content:"\F0187"}.mdi-comment-search:before{content:"\F0A3C"}.mdi-comment-search-outline:before{content:"\F0A3D"}.mdi-comment-text:before{content:"\F0188"}.mdi-comment-text-multiple:before{content:"\F0860"}.mdi-comment-text-multiple-outline:before{content:"\F0861"}.mdi-comment-text-outline:before{content:"\F0189"}.mdi-compare:before{content:"\F018A"}.mdi-compare-horizontal:before{content:"\F1492"}.mdi-compare-vertical:before{content:"\F1493"}.mdi-compass:before{content:"\F018B"}.mdi-compass-off:before{content:"\F0B80"}.mdi-compass-off-outline:before{content:"\F0B81"}.mdi-compass-outline:before{content:"\F018C"}.mdi-compass-rose:before{content:"\F1382"}.mdi-concourse-ci:before{content:"\F10A0"}.mdi-connection:before{content:"\F1616"}.mdi-console:before{content:"\F018D"}.mdi-console-line:before{content:"\F07B7"}.mdi-console-network:before{content:"\F08A9"}.mdi-console-network-outline:before{content:"\F0C60"}.mdi-consolidate:before{content:"\F10D8"}.mdi-contactless-payment:before{content:"\F0D6A"}.mdi-contactless-payment-circle:before{content:"\F0321"}.mdi-contactless-payment-circle-outline:before{content:"\F0408"}.mdi-contacts:before{content:"\F06CB"}.mdi-contacts-outline:before{content:"\F05B8"}.mdi-contain:before{content:"\F0A3E"}.mdi-contain-end:before{content:"\F0A3F"}.mdi-contain-start:before{content:"\F0A40"}.mdi-content-copy:before{content:"\F018F"}.mdi-content-cut:before{content:"\F0190"}.mdi-content-duplicate:before{content:"\F0191"}.mdi-content-paste:before{content:"\F0192"}.mdi-content-save:before{content:"\F0193"}.mdi-content-save-alert:before{content:"\F0F42"}.mdi-content-save-alert-outline:before{content:"\F0F43"}.mdi-content-save-all:before{content:"\F0194"}.mdi-content-save-all-outline:before{content:"\F0F44"}.mdi-content-save-cog:before{content:"\F145B"}.mdi-content-save-cog-outline:before{content:"\F145C"}.mdi-content-save-edit:before{content:"\F0CFB"}.mdi-content-save-edit-outline:before{content:"\F0CFC"}.mdi-content-save-move:before{content:"\F0E27"}.mdi-content-save-move-outline:before{content:"\F0E28"}.mdi-content-save-off:before{content:"\F1643"}.mdi-content-save-off-outline:before{content:"\F1644"}.mdi-content-save-outline:before{content:"\F0818"}.mdi-content-save-settings:before{content:"\F061B"}.mdi-content-save-settings-outline:before{content:"\F0B2E"}.mdi-contrast:before{content:"\F0195"}.mdi-contrast-box:before{content:"\F0196"}.mdi-contrast-circle:before{content:"\F0197"}.mdi-controller-classic:before{content:"\F0B82"}.mdi-controller-classic-outline:before{content:"\F0B83"}.mdi-cookie:before{content:"\F0198"}.mdi-cookie-alert:before{content:"\F16D0"}.mdi-cookie-alert-outline:before{content:"\F16D1"}.mdi-cookie-check:before{content:"\F16D2"}.mdi-cookie-check-outline:before{content:"\F16D3"}.mdi-cookie-clock:before{content:"\F16E4"}.mdi-cookie-clock-outline:before{content:"\F16E5"}.mdi-cookie-cog:before{content:"\F16D4"}.mdi-cookie-cog-outline:before{content:"\F16D5"}.mdi-cookie-edit:before{content:"\F16E6"}.mdi-cookie-edit-outline:before{content:"\F16E7"}.mdi-cookie-lock:before{content:"\F16E8"}.mdi-cookie-lock-outline:before{content:"\F16E9"}.mdi-cookie-minus:before{content:"\F16DA"}.mdi-cookie-minus-outline:before{content:"\F16DB"}.mdi-cookie-off:before{content:"\F16EA"}.mdi-cookie-off-outline:before{content:"\F16EB"}.mdi-cookie-outline:before{content:"\F16DE"}.mdi-cookie-plus:before{content:"\F16D6"}.mdi-cookie-plus-outline:before{content:"\F16D7"}.mdi-cookie-refresh:before{content:"\F16EC"}.mdi-cookie-refresh-outline:before{content:"\F16ED"}.mdi-cookie-remove:before{content:"\F16D8"}.mdi-cookie-remove-outline:before{content:"\F16D9"}.mdi-cookie-settings:before{content:"\F16DC"}.mdi-cookie-settings-outline:before{content:"\F16DD"}.mdi-coolant-temperature:before{content:"\F03C8"}.mdi-copyright:before{content:"\F05E6"}.mdi-cordova:before{content:"\F0958"}.mdi-corn:before{content:"\F07B8"}.mdi-corn-off:before{content:"\F13EF"}.mdi-cosine-wave:before{content:"\F1479"}.mdi-counter:before{content:"\F0199"}.mdi-cow:before{content:"\F019A"}.mdi-cpu-32-bit:before{content:"\F0EDF"}.mdi-cpu-64-bit:before{content:"\F0EE0"}.mdi-crane:before{content:"\F0862"}.mdi-creation:before{content:"\F0674"}.mdi-creative-commons:before{content:"\F0D6B"}.mdi-credit-card:before{content:"\F0FEF"}.mdi-credit-card-check:before{content:"\F13D0"}.mdi-credit-card-check-outline:before{content:"\F13D1"}.mdi-credit-card-clock:before{content:"\F0EE1"}.mdi-credit-card-clock-outline:before{content:"\F0EE2"}.mdi-credit-card-marker:before{content:"\F06A8"}.mdi-credit-card-marker-outline:before{content:"\F0DBE"}.mdi-credit-card-minus:before{content:"\F0FAC"}.mdi-credit-card-minus-outline:before{content:"\F0FAD"}.mdi-credit-card-multiple:before{content:"\F0FF0"}.mdi-credit-card-multiple-outline:before{content:"\F019C"}.mdi-credit-card-off:before{content:"\F0FF1"}.mdi-credit-card-off-outline:before{content:"\F05E4"}.mdi-credit-card-outline:before{content:"\F019B"}.mdi-credit-card-plus:before{content:"\F0FF2"}.mdi-credit-card-plus-outline:before{content:"\F0676"}.mdi-credit-card-refresh:before{content:"\F1645"}.mdi-credit-card-refresh-outline:before{content:"\F1646"}.mdi-credit-card-refund:before{content:"\F0FF3"}.mdi-credit-card-refund-outline:before{content:"\F0AA8"}.mdi-credit-card-remove:before{content:"\F0FAE"}.mdi-credit-card-remove-outline:before{content:"\F0FAF"}.mdi-credit-card-scan:before{content:"\F0FF4"}.mdi-credit-card-scan-outline:before{content:"\F019D"}.mdi-credit-card-search:before{content:"\F1647"}.mdi-credit-card-search-outline:before{content:"\F1648"}.mdi-credit-card-settings:before{content:"\F0FF5"}.mdi-credit-card-settings-outline:before{content:"\F08D7"}.mdi-credit-card-sync:before{content:"\F1649"}.mdi-credit-card-sync-outline:before{content:"\F164A"}.mdi-credit-card-wireless:before{content:"\F0802"}.mdi-credit-card-wireless-off:before{content:"\F057A"}.mdi-credit-card-wireless-off-outline:before{content:"\F057B"}.mdi-credit-card-wireless-outline:before{content:"\F0D6C"}.mdi-cricket:before{content:"\F0D6D"}.mdi-crop:before{content:"\F019E"}.mdi-crop-free:before{content:"\F019F"}.mdi-crop-landscape:before{content:"\F01A0"}.mdi-crop-portrait:before{content:"\F01A1"}.mdi-crop-rotate:before{content:"\F0696"}.mdi-crop-square:before{content:"\F01A2"}.mdi-crosshairs:before{content:"\F01A3"}.mdi-crosshairs-gps:before{content:"\F01A4"}.mdi-crosshairs-off:before{content:"\F0F45"}.mdi-crosshairs-question:before{content:"\F1136"}.mdi-crown:before{content:"\F01A5"}.mdi-crown-outline:before{content:"\F11D0"}.mdi-cryengine:before{content:"\F0959"}.mdi-crystal-ball:before{content:"\F0B2F"}.mdi-cube:before{content:"\F01A6"}.mdi-cube-off:before{content:"\F141C"}.mdi-cube-off-outline:before{content:"\F141D"}.mdi-cube-outline:before{content:"\F01A7"}.mdi-cube-scan:before{content:"\F0B84"}.mdi-cube-send:before{content:"\F01A8"}.mdi-cube-unfolded:before{content:"\F01A9"}.mdi-cup:before{content:"\F01AA"}.mdi-cup-off:before{content:"\F05E5"}.mdi-cup-off-outline:before{content:"\F137D"}.mdi-cup-outline:before{content:"\F130F"}.mdi-cup-water:before{content:"\F01AB"}.mdi-cupboard:before{content:"\F0F46"}.mdi-cupboard-outline:before{content:"\F0F47"}.mdi-cupcake:before{content:"\F095A"}.mdi-curling:before{content:"\F0863"}.mdi-currency-bdt:before{content:"\F0864"}.mdi-currency-brl:before{content:"\F0B85"}.mdi-currency-btc:before{content:"\F01AC"}.mdi-currency-cny:before{content:"\F07BA"}.mdi-currency-eth:before{content:"\F07BB"}.mdi-currency-eur:before{content:"\F01AD"}.mdi-currency-eur-off:before{content:"\F1315"}.mdi-currency-gbp:before{content:"\F01AE"}.mdi-currency-ils:before{content:"\F0C61"}.mdi-currency-inr:before{content:"\F01AF"}.mdi-currency-jpy:before{content:"\F07BC"}.mdi-currency-krw:before{content:"\F07BD"}.mdi-currency-kzt:before{content:"\F0865"}.mdi-currency-mnt:before{content:"\F1512"}.mdi-currency-ngn:before{content:"\F01B0"}.mdi-currency-php:before{content:"\F09E6"}.mdi-currency-rial:before{content:"\F0E9C"}.mdi-currency-rub:before{content:"\F01B1"}.mdi-currency-sign:before{content:"\F07BE"}.mdi-currency-try:before{content:"\F01B2"}.mdi-currency-twd:before{content:"\F07BF"}.mdi-currency-usd:before{content:"\F01C1"}.mdi-currency-usd-circle:before{content:"\F116B"}.mdi-currency-usd-circle-outline:before{content:"\F0178"}.mdi-currency-usd-off:before{content:"\F067A"}.mdi-current-ac:before{content:"\F1480"}.mdi-current-dc:before{content:"\F095C"}.mdi-cursor-default:before{content:"\F01C0"}.mdi-cursor-default-click:before{content:"\F0CFD"}.mdi-cursor-default-click-outline:before{content:"\F0CFE"}.mdi-cursor-default-gesture:before{content:"\F1127"}.mdi-cursor-default-gesture-outline:before{content:"\F1128"}.mdi-cursor-default-outline:before{content:"\F01BF"}.mdi-cursor-move:before{content:"\F01BE"}.mdi-cursor-pointer:before{content:"\F01BD"}.mdi-cursor-text:before{content:"\F05E7"}.mdi-dance-ballroom:before{content:"\F15FB"}.mdi-dance-pole:before{content:"\F1578"}.mdi-data-matrix:before{content:"\F153C"}.mdi-data-matrix-edit:before{content:"\F153D"}.mdi-data-matrix-minus:before{content:"\F153E"}.mdi-data-matrix-plus:before{content:"\F153F"}.mdi-data-matrix-remove:before{content:"\F1540"}.mdi-data-matrix-scan:before{content:"\F1541"}.mdi-database:before{content:"\F01BC"}.mdi-database-alert:before{content:"\F163A"}.mdi-database-alert-outline:before{content:"\F1624"}.mdi-database-arrow-down:before{content:"\F163B"}.mdi-database-arrow-down-outline:before{content:"\F1625"}.mdi-database-arrow-left:before{content:"\F163C"}.mdi-database-arrow-left-outline:before{content:"\F1626"}.mdi-database-arrow-right:before{content:"\F163D"}.mdi-database-arrow-right-outline:before{content:"\F1627"}.mdi-database-arrow-up:before{content:"\F163E"}.mdi-database-arrow-up-outline:before{content:"\F1628"}.mdi-database-check:before{content:"\F0AA9"}.mdi-database-check-outline:before{content:"\F1629"}.mdi-database-clock:before{content:"\F163F"}.mdi-database-clock-outline:before{content:"\F162A"}.mdi-database-cog:before{content:"\F164B"}.mdi-database-cog-outline:before{content:"\F164C"}.mdi-database-edit:before{content:"\F0B86"}.mdi-database-edit-outline:before{content:"\F162B"}.mdi-database-export:before{content:"\F095E"}.mdi-database-export-outline:before{content:"\F162C"}.mdi-database-import:before{content:"\F095D"}.mdi-database-import-outline:before{content:"\F162D"}.mdi-database-lock:before{content:"\F0AAA"}.mdi-database-lock-outline:before{content:"\F162E"}.mdi-database-marker:before{content:"\F12F6"}.mdi-database-marker-outline:before{content:"\F162F"}.mdi-database-minus:before{content:"\F01BB"}.mdi-database-minus-outline:before{content:"\F1630"}.mdi-database-off:before{content:"\F1640"}.mdi-database-off-outline:before{content:"\F1631"}.mdi-database-outline:before{content:"\F1632"}.mdi-database-plus:before{content:"\F01BA"}.mdi-database-plus-outline:before{content:"\F1633"}.mdi-database-refresh:before{content:"\F05C2"}.mdi-database-refresh-outline:before{content:"\F1634"}.mdi-database-remove:before{content:"\F0D00"}.mdi-database-remove-outline:before{content:"\F1635"}.mdi-database-search:before{content:"\F0866"}.mdi-database-search-outline:before{content:"\F1636"}.mdi-database-settings:before{content:"\F0D01"}.mdi-database-settings-outline:before{content:"\F1637"}.mdi-database-sync:before{content:"\F0CFF"}.mdi-database-sync-outline:before{content:"\F1638"}.mdi-death-star:before{content:"\F08D8"}.mdi-death-star-variant:before{content:"\F08D9"}.mdi-deathly-hallows:before{content:"\F0B87"}.mdi-debian:before{content:"\F08DA"}.mdi-debug-step-into:before{content:"\F01B9"}.mdi-debug-step-out:before{content:"\F01B8"}.mdi-debug-step-over:before{content:"\F01B7"}.mdi-decagram:before{content:"\F076C"}.mdi-decagram-outline:before{content:"\F076D"}.mdi-decimal:before{content:"\F10A1"}.mdi-decimal-comma:before{content:"\F10A2"}.mdi-decimal-comma-decrease:before{content:"\F10A3"}.mdi-decimal-comma-increase:before{content:"\F10A4"}.mdi-decimal-decrease:before{content:"\F01B6"}.mdi-decimal-increase:before{content:"\F01B5"}.mdi-delete:before{content:"\F01B4"}.mdi-delete-alert:before{content:"\F10A5"}.mdi-delete-alert-outline:before{content:"\F10A6"}.mdi-delete-circle:before{content:"\F0683"}.mdi-delete-circle-outline:before{content:"\F0B88"}.mdi-delete-clock:before{content:"\F1556"}.mdi-delete-clock-outline:before{content:"\F1557"}.mdi-delete-empty:before{content:"\F06CC"}.mdi-delete-empty-outline:before{content:"\F0E9D"}.mdi-delete-forever:before{content:"\F05E8"}.mdi-delete-forever-outline:before{content:"\F0B89"}.mdi-delete-off:before{content:"\F10A7"}.mdi-delete-off-outline:before{content:"\F10A8"}.mdi-delete-outline:before{content:"\F09E7"}.mdi-delete-restore:before{content:"\F0819"}.mdi-delete-sweep:before{content:"\F05E9"}.mdi-delete-sweep-outline:before{content:"\F0C62"}.mdi-delete-variant:before{content:"\F01B3"}.mdi-delta:before{content:"\F01C2"}.mdi-desk:before{content:"\F1239"}.mdi-desk-lamp:before{content:"\F095F"}.mdi-deskphone:before{content:"\F01C3"}.mdi-desktop-classic:before{content:"\F07C0"}.mdi-desktop-mac:before{content:"\F01C4"}.mdi-desktop-mac-dashboard:before{content:"\F09E8"}.mdi-desktop-tower:before{content:"\F01C5"}.mdi-desktop-tower-monitor:before{content:"\F0AAB"}.mdi-details:before{content:"\F01C6"}.mdi-dev-to:before{content:"\F0D6E"}.mdi-developer-board:before{content:"\F0697"}.mdi-deviantart:before{content:"\F01C7"}.mdi-devices:before{content:"\F0FB0"}.mdi-diabetes:before{content:"\F1126"}.mdi-dialpad:before{content:"\F061C"}.mdi-diameter:before{content:"\F0C63"}.mdi-diameter-outline:before{content:"\F0C64"}.mdi-diameter-variant:before{content:"\F0C65"}.mdi-diamond:before{content:"\F0B8A"}.mdi-diamond-outline:before{content:"\F0B8B"}.mdi-diamond-stone:before{content:"\F01C8"}.mdi-dice-1:before{content:"\F01CA"}.mdi-dice-1-outline:before{content:"\F114A"}.mdi-dice-2:before{content:"\F01CB"}.mdi-dice-2-outline:before{content:"\F114B"}.mdi-dice-3:before{content:"\F01CC"}.mdi-dice-3-outline:before{content:"\F114C"}.mdi-dice-4:before{content:"\F01CD"}.mdi-dice-4-outline:before{content:"\F114D"}.mdi-dice-5:before{content:"\F01CE"}.mdi-dice-5-outline:before{content:"\F114E"}.mdi-dice-6:before{content:"\F01CF"}.mdi-dice-6-outline:before{content:"\F114F"}.mdi-dice-d10:before{content:"\F1153"}.mdi-dice-d10-outline:before{content:"\F076F"}.mdi-dice-d12:before{content:"\F1154"}.mdi-dice-d12-outline:before{content:"\F0867"}.mdi-dice-d20:before{content:"\F1155"}.mdi-dice-d20-outline:before{content:"\F05EA"}.mdi-dice-d4:before{content:"\F1150"}.mdi-dice-d4-outline:before{content:"\F05EB"}.mdi-dice-d6:before{content:"\F1151"}.mdi-dice-d6-outline:before{content:"\F05ED"}.mdi-dice-d8:before{content:"\F1152"}.mdi-dice-d8-outline:before{content:"\F05EC"}.mdi-dice-multiple:before{content:"\F076E"}.mdi-dice-multiple-outline:before{content:"\F1156"}.mdi-digital-ocean:before{content:"\F1237"}.mdi-dip-switch:before{content:"\F07C1"}.mdi-directions:before{content:"\F01D0"}.mdi-directions-fork:before{content:"\F0641"}.mdi-disc:before{content:"\F05EE"}.mdi-disc-alert:before{content:"\F01D1"}.mdi-disc-player:before{content:"\F0960"}.mdi-discord:before{content:"\F066F"}.mdi-dishwasher:before{content:"\F0AAC"}.mdi-dishwasher-alert:before{content:"\F11B8"}.mdi-dishwasher-off:before{content:"\F11B9"}.mdi-disqus:before{content:"\F01D2"}.mdi-distribute-horizontal-center:before{content:"\F11C9"}.mdi-distribute-horizontal-left:before{content:"\F11C8"}.mdi-distribute-horizontal-right:before{content:"\F11CA"}.mdi-distribute-vertical-bottom:before{content:"\F11CB"}.mdi-distribute-vertical-center:before{content:"\F11CC"}.mdi-distribute-vertical-top:before{content:"\F11CD"}.mdi-diving-flippers:before{content:"\F0DBF"}.mdi-diving-helmet:before{content:"\F0DC0"}.mdi-diving-scuba:before{content:"\F0DC1"}.mdi-diving-scuba-flag:before{content:"\F0DC2"}.mdi-diving-scuba-tank:before{content:"\F0DC3"}.mdi-diving-scuba-tank-multiple:before{content:"\F0DC4"}.mdi-diving-snorkel:before{content:"\F0DC5"}.mdi-division:before{content:"\F01D4"}.mdi-division-box:before{content:"\F01D5"}.mdi-dlna:before{content:"\F0A41"}.mdi-dna:before{content:"\F0684"}.mdi-dns:before{content:"\F01D6"}.mdi-dns-outline:before{content:"\F0B8C"}.mdi-do-not-disturb:before{content:"\F0698"}.mdi-do-not-disturb-off:before{content:"\F0699"}.mdi-dock-bottom:before{content:"\F10A9"}.mdi-dock-left:before{content:"\F10AA"}.mdi-dock-right:before{content:"\F10AB"}.mdi-dock-top:before{content:"\F1513"}.mdi-dock-window:before{content:"\F10AC"}.mdi-docker:before{content:"\F0868"}.mdi-doctor:before{content:"\F0A42"}.mdi-dog:before{content:"\F0A43"}.mdi-dog-service:before{content:"\F0AAD"}.mdi-dog-side:before{content:"\F0A44"}.mdi-dog-side-off:before{content:"\F16EE"}.mdi-dolby:before{content:"\F06B3"}.mdi-dolly:before{content:"\F0E9E"}.mdi-domain:before{content:"\F01D7"}.mdi-domain-off:before{content:"\F0D6F"}.mdi-domain-plus:before{content:"\F10AD"}.mdi-domain-remove:before{content:"\F10AE"}.mdi-dome-light:before{content:"\F141E"}.mdi-domino-mask:before{content:"\F1023"}.mdi-donkey:before{content:"\F07C2"}.mdi-door:before{content:"\F081A"}.mdi-door-closed:before{content:"\F081B"}.mdi-door-closed-lock:before{content:"\F10AF"}.mdi-door-open:before{content:"\F081C"}.mdi-doorbell:before{content:"\F12E6"}.mdi-doorbell-video:before{content:"\F0869"}.mdi-dot-net:before{content:"\F0AAE"}.mdi-dots-grid:before{content:"\F15FC"}.mdi-dots-hexagon:before{content:"\F15FF"}.mdi-dots-horizontal:before{content:"\F01D8"}.mdi-dots-horizontal-circle:before{content:"\F07C3"}.mdi-dots-horizontal-circle-outline:before{content:"\F0B8D"}.mdi-dots-square:before{content:"\F15FD"}.mdi-dots-triangle:before{content:"\F15FE"}.mdi-dots-vertical:before{content:"\F01D9"}.mdi-dots-vertical-circle:before{content:"\F07C4"}.mdi-dots-vertical-circle-outline:before{content:"\F0B8E"}.mdi-douban:before{content:"\F069A"}.mdi-download:before{content:"\F01DA"}.mdi-download-box:before{content:"\F1462"}.mdi-download-box-outline:before{content:"\F1463"}.mdi-download-circle:before{content:"\F1464"}.mdi-download-circle-outline:before{content:"\F1465"}.mdi-download-lock:before{content:"\F1320"}.mdi-download-lock-outline:before{content:"\F1321"}.mdi-download-multiple:before{content:"\F09E9"}.mdi-download-network:before{content:"\F06F4"}.mdi-download-network-outline:before{content:"\F0C66"}.mdi-download-off:before{content:"\F10B0"}.mdi-download-off-outline:before{content:"\F10B1"}.mdi-download-outline:before{content:"\F0B8F"}.mdi-drag:before{content:"\F01DB"}.mdi-drag-horizontal:before{content:"\F01DC"}.mdi-drag-horizontal-variant:before{content:"\F12F0"}.mdi-drag-variant:before{content:"\F0B90"}.mdi-drag-vertical:before{content:"\F01DD"}.mdi-drag-vertical-variant:before{content:"\F12F1"}.mdi-drama-masks:before{content:"\F0D02"}.mdi-draw:before{content:"\F0F49"}.mdi-drawing:before{content:"\F01DE"}.mdi-drawing-box:before{content:"\F01DF"}.mdi-dresser:before{content:"\F0F4A"}.mdi-dresser-outline:before{content:"\F0F4B"}.mdi-drone:before{content:"\F01E2"}.mdi-dropbox:before{content:"\F01E3"}.mdi-drupal:before{content:"\F01E4"}.mdi-duck:before{content:"\F01E5"}.mdi-dumbbell:before{content:"\F01E6"}.mdi-dump-truck:before{content:"\F0C67"}.mdi-ear-hearing:before{content:"\F07C5"}.mdi-ear-hearing-off:before{content:"\F0A45"}.mdi-earth:before{content:"\F01E7"}.mdi-earth-arrow-right:before{content:"\F1311"}.mdi-earth-box:before{content:"\F06CD"}.mdi-earth-box-minus:before{content:"\F1407"}.mdi-earth-box-off:before{content:"\F06CE"}.mdi-earth-box-plus:before{content:"\F1406"}.mdi-earth-box-remove:before{content:"\F1408"}.mdi-earth-minus:before{content:"\F1404"}.mdi-earth-off:before{content:"\F01E8"}.mdi-earth-plus:before{content:"\F1403"}.mdi-earth-remove:before{content:"\F1405"}.mdi-egg:before{content:"\F0AAF"}.mdi-egg-easter:before{content:"\F0AB0"}.mdi-egg-off:before{content:"\F13F0"}.mdi-egg-off-outline:before{content:"\F13F1"}.mdi-egg-outline:before{content:"\F13F2"}.mdi-eiffel-tower:before{content:"\F156B"}.mdi-eight-track:before{content:"\F09EA"}.mdi-eject:before{content:"\F01EA"}.mdi-eject-outline:before{content:"\F0B91"}.mdi-electric-switch:before{content:"\F0E9F"}.mdi-electric-switch-closed:before{content:"\F10D9"}.mdi-electron-framework:before{content:"\F1024"}.mdi-elephant:before{content:"\F07C6"}.mdi-elevation-decline:before{content:"\F01EB"}.mdi-elevation-rise:before{content:"\F01EC"}.mdi-elevator:before{content:"\F01ED"}.mdi-elevator-down:before{content:"\F12C2"}.mdi-elevator-passenger:before{content:"\F1381"}.mdi-elevator-up:before{content:"\F12C1"}.mdi-ellipse:before{content:"\F0EA0"}.mdi-ellipse-outline:before{content:"\F0EA1"}.mdi-email:before{content:"\F01EE"}.mdi-email-alert:before{content:"\F06CF"}.mdi-email-alert-outline:before{content:"\F0D42"}.mdi-email-box:before{content:"\F0D03"}.mdi-email-check:before{content:"\F0AB1"}.mdi-email-check-outline:before{content:"\F0AB2"}.mdi-email-edit:before{content:"\F0EE3"}.mdi-email-edit-outline:before{content:"\F0EE4"}.mdi-email-lock:before{content:"\F01F1"}.mdi-email-mark-as-unread:before{content:"\F0B92"}.mdi-email-minus:before{content:"\F0EE5"}.mdi-email-minus-outline:before{content:"\F0EE6"}.mdi-email-multiple:before{content:"\F0EE7"}.mdi-email-multiple-outline:before{content:"\F0EE8"}.mdi-email-newsletter:before{content:"\F0FB1"}.mdi-email-off:before{content:"\F13E3"}.mdi-email-off-outline:before{content:"\F13E4"}.mdi-email-open:before{content:"\F01EF"}.mdi-email-open-multiple:before{content:"\F0EE9"}.mdi-email-open-multiple-outline:before{content:"\F0EEA"}.mdi-email-open-outline:before{content:"\F05EF"}.mdi-email-outline:before{content:"\F01F0"}.mdi-email-plus:before{content:"\F09EB"}.mdi-email-plus-outline:before{content:"\F09EC"}.mdi-email-receive:before{content:"\F10DA"}.mdi-email-receive-outline:before{content:"\F10DB"}.mdi-email-remove:before{content:"\F1661"}.mdi-email-remove-outline:before{content:"\F1662"}.mdi-email-search:before{content:"\F0961"}.mdi-email-search-outline:before{content:"\F0962"}.mdi-email-send:before{content:"\F10DC"}.mdi-email-send-outline:before{content:"\F10DD"}.mdi-email-sync:before{content:"\F12C7"}.mdi-email-sync-outline:before{content:"\F12C8"}.mdi-email-variant:before{content:"\F05F0"}.mdi-ember:before{content:"\F0B30"}.mdi-emby:before{content:"\F06B4"}.mdi-emoticon:before{content:"\F0C68"}.mdi-emoticon-angry:before{content:"\F0C69"}.mdi-emoticon-angry-outline:before{content:"\F0C6A"}.mdi-emoticon-confused:before{content:"\F10DE"}.mdi-emoticon-confused-outline:before{content:"\F10DF"}.mdi-emoticon-cool:before{content:"\F0C6B"}.mdi-emoticon-cool-outline:before{content:"\F01F3"}.mdi-emoticon-cry:before{content:"\F0C6C"}.mdi-emoticon-cry-outline:before{content:"\F0C6D"}.mdi-emoticon-dead:before{content:"\F0C6E"}.mdi-emoticon-dead-outline:before{content:"\F069B"}.mdi-emoticon-devil:before{content:"\F0C6F"}.mdi-emoticon-devil-outline:before{content:"\F01F4"}.mdi-emoticon-excited:before{content:"\F0C70"}.mdi-emoticon-excited-outline:before{content:"\F069C"}.mdi-emoticon-frown:before{content:"\F0F4C"}.mdi-emoticon-frown-outline:before{content:"\F0F4D"}.mdi-emoticon-happy:before{content:"\F0C71"}.mdi-emoticon-happy-outline:before{content:"\F01F5"}.mdi-emoticon-kiss:before{content:"\F0C72"}.mdi-emoticon-kiss-outline:before{content:"\F0C73"}.mdi-emoticon-lol:before{content:"\F1214"}.mdi-emoticon-lol-outline:before{content:"\F1215"}.mdi-emoticon-neutral:before{content:"\F0C74"}.mdi-emoticon-neutral-outline:before{content:"\F01F6"}.mdi-emoticon-outline:before{content:"\F01F2"}.mdi-emoticon-poop:before{content:"\F01F7"}.mdi-emoticon-poop-outline:before{content:"\F0C75"}.mdi-emoticon-sad:before{content:"\F0C76"}.mdi-emoticon-sad-outline:before{content:"\F01F8"}.mdi-emoticon-sick:before{content:"\F157C"}.mdi-emoticon-sick-outline:before{content:"\F157D"}.mdi-emoticon-tongue:before{content:"\F01F9"}.mdi-emoticon-tongue-outline:before{content:"\F0C77"}.mdi-emoticon-wink:before{content:"\F0C78"}.mdi-emoticon-wink-outline:before{content:"\F0C79"}.mdi-engine:before{content:"\F01FA"}.mdi-engine-off:before{content:"\F0A46"}.mdi-engine-off-outline:before{content:"\F0A47"}.mdi-engine-outline:before{content:"\F01FB"}.mdi-epsilon:before{content:"\F10E0"}.mdi-equal:before{content:"\F01FC"}.mdi-equal-box:before{content:"\F01FD"}.mdi-equalizer:before{content:"\F0EA2"}.mdi-equalizer-outline:before{content:"\F0EA3"}.mdi-eraser:before{content:"\F01FE"}.mdi-eraser-variant:before{content:"\F0642"}.mdi-escalator:before{content:"\F01FF"}.mdi-escalator-box:before{content:"\F1399"}.mdi-escalator-down:before{content:"\F12C0"}.mdi-escalator-up:before{content:"\F12BF"}.mdi-eslint:before{content:"\F0C7A"}.mdi-et:before{content:"\F0AB3"}.mdi-ethereum:before{content:"\F086A"}.mdi-ethernet:before{content:"\F0200"}.mdi-ethernet-cable:before{content:"\F0201"}.mdi-ethernet-cable-off:before{content:"\F0202"}.mdi-ev-plug-ccs1:before{content:"\F1519"}.mdi-ev-plug-ccs2:before{content:"\F151A"}.mdi-ev-plug-chademo:before{content:"\F151B"}.mdi-ev-plug-tesla:before{content:"\F151C"}.mdi-ev-plug-type1:before{content:"\F151D"}.mdi-ev-plug-type2:before{content:"\F151E"}.mdi-ev-station:before{content:"\F05F1"}.mdi-evernote:before{content:"\F0204"}.mdi-excavator:before{content:"\F1025"}.mdi-exclamation:before{content:"\F0205"}.mdi-exclamation-thick:before{content:"\F1238"}.mdi-exit-run:before{content:"\F0A48"}.mdi-exit-to-app:before{content:"\F0206"}.mdi-expand-all:before{content:"\F0AB4"}.mdi-expand-all-outline:before{content:"\F0AB5"}.mdi-expansion-card:before{content:"\F08AE"}.mdi-expansion-card-variant:before{content:"\F0FB2"}.mdi-exponent:before{content:"\F0963"}.mdi-exponent-box:before{content:"\F0964"}.mdi-export:before{content:"\F0207"}.mdi-export-variant:before{content:"\F0B93"}.mdi-eye:before{content:"\F0208"}.mdi-eye-check:before{content:"\F0D04"}.mdi-eye-check-outline:before{content:"\F0D05"}.mdi-eye-circle:before{content:"\F0B94"}.mdi-eye-circle-outline:before{content:"\F0B95"}.mdi-eye-minus:before{content:"\F1026"}.mdi-eye-minus-outline:before{content:"\F1027"}.mdi-eye-off:before{content:"\F0209"}.mdi-eye-off-outline:before{content:"\F06D1"}.mdi-eye-outline:before{content:"\F06D0"}.mdi-eye-plus:before{content:"\F086B"}.mdi-eye-plus-outline:before{content:"\F086C"}.mdi-eye-remove:before{content:"\F15E3"}.mdi-eye-remove-outline:before{content:"\F15E4"}.mdi-eye-settings:before{content:"\F086D"}.mdi-eye-settings-outline:before{content:"\F086E"}.mdi-eyedropper:before{content:"\F020A"}.mdi-eyedropper-minus:before{content:"\F13DD"}.mdi-eyedropper-off:before{content:"\F13DF"}.mdi-eyedropper-plus:before{content:"\F13DC"}.mdi-eyedropper-remove:before{content:"\F13DE"}.mdi-eyedropper-variant:before{content:"\F020B"}.mdi-face:before{content:"\F0643"}.mdi-face-agent:before{content:"\F0D70"}.mdi-face-mask:before{content:"\F1586"}.mdi-face-mask-outline:before{content:"\F1587"}.mdi-face-outline:before{content:"\F0B96"}.mdi-face-profile:before{content:"\F0644"}.mdi-face-profile-woman:before{content:"\F1076"}.mdi-face-recognition:before{content:"\F0C7B"}.mdi-face-shimmer:before{content:"\F15CC"}.mdi-face-shimmer-outline:before{content:"\F15CD"}.mdi-face-woman:before{content:"\F1077"}.mdi-face-woman-outline:before{content:"\F1078"}.mdi-face-woman-shimmer:before{content:"\F15CE"}.mdi-face-woman-shimmer-outline:before{content:"\F15CF"}.mdi-facebook:before{content:"\F020C"}.mdi-facebook-gaming:before{content:"\F07DD"}.mdi-facebook-messenger:before{content:"\F020E"}.mdi-facebook-workplace:before{content:"\F0B31"}.mdi-factory:before{content:"\F020F"}.mdi-family-tree:before{content:"\F160E"}.mdi-fan:before{content:"\F0210"}.mdi-fan-alert:before{content:"\F146C"}.mdi-fan-auto:before{content:"\F171D"}.mdi-fan-chevron-down:before{content:"\F146D"}.mdi-fan-chevron-up:before{content:"\F146E"}.mdi-fan-minus:before{content:"\F1470"}.mdi-fan-off:before{content:"\F081D"}.mdi-fan-plus:before{content:"\F146F"}.mdi-fan-remove:before{content:"\F1471"}.mdi-fan-speed-1:before{content:"\F1472"}.mdi-fan-speed-2:before{content:"\F1473"}.mdi-fan-speed-3:before{content:"\F1474"}.mdi-fast-forward:before{content:"\F0211"}.mdi-fast-forward-10:before{content:"\F0D71"}.mdi-fast-forward-30:before{content:"\F0D06"}.mdi-fast-forward-5:before{content:"\F11F8"}.mdi-fast-forward-60:before{content:"\F160B"}.mdi-fast-forward-outline:before{content:"\F06D2"}.mdi-fax:before{content:"\F0212"}.mdi-feather:before{content:"\F06D3"}.mdi-feature-search:before{content:"\F0A49"}.mdi-feature-search-outline:before{content:"\F0A4A"}.mdi-fedora:before{content:"\F08DB"}.mdi-fencing:before{content:"\F14C1"}.mdi-ferris-wheel:before{content:"\F0EA4"}.mdi-ferry:before{content:"\F0213"}.mdi-file:before{content:"\F0214"}.mdi-file-account:before{content:"\F073B"}.mdi-file-account-outline:before{content:"\F1028"}.mdi-file-alert:before{content:"\F0A4B"}.mdi-file-alert-outline:before{content:"\F0A4C"}.mdi-file-cabinet:before{content:"\F0AB6"}.mdi-file-cad:before{content:"\F0EEB"}.mdi-file-cad-box:before{content:"\F0EEC"}.mdi-file-cancel:before{content:"\F0DC6"}.mdi-file-cancel-outline:before{content:"\F0DC7"}.mdi-file-certificate:before{content:"\F1186"}.mdi-file-certificate-outline:before{content:"\F1187"}.mdi-file-chart:before{content:"\F0215"}.mdi-file-chart-outline:before{content:"\F1029"}.mdi-file-check:before{content:"\F0216"}.mdi-file-check-outline:before{content:"\F0E29"}.mdi-file-clock:before{content:"\F12E1"}.mdi-file-clock-outline:before{content:"\F12E2"}.mdi-file-cloud:before{content:"\F0217"}.mdi-file-cloud-outline:before{content:"\F102A"}.mdi-file-code:before{content:"\F022E"}.mdi-file-code-outline:before{content:"\F102B"}.mdi-file-cog:before{content:"\F107B"}.mdi-file-cog-outline:before{content:"\F107C"}.mdi-file-compare:before{content:"\F08AA"}.mdi-file-delimited:before{content:"\F0218"}.mdi-file-delimited-outline:before{content:"\F0EA5"}.mdi-file-document:before{content:"\F0219"}.mdi-file-document-edit:before{content:"\F0DC8"}.mdi-file-document-edit-outline:before{content:"\F0DC9"}.mdi-file-document-multiple:before{content:"\F1517"}.mdi-file-document-multiple-outline:before{content:"\F1518"}.mdi-file-document-outline:before{content:"\F09EE"}.mdi-file-download:before{content:"\F0965"}.mdi-file-download-outline:before{content:"\F0966"}.mdi-file-edit:before{content:"\F11E7"}.mdi-file-edit-outline:before{content:"\F11E8"}.mdi-file-excel:before{content:"\F021B"}.mdi-file-excel-box:before{content:"\F021C"}.mdi-file-excel-box-outline:before{content:"\F102C"}.mdi-file-excel-outline:before{content:"\F102D"}.mdi-file-export:before{content:"\F021D"}.mdi-file-export-outline:before{content:"\F102E"}.mdi-file-eye:before{content:"\F0DCA"}.mdi-file-eye-outline:before{content:"\F0DCB"}.mdi-file-find:before{content:"\F021E"}.mdi-file-find-outline:before{content:"\F0B97"}.mdi-file-hidden:before{content:"\F0613"}.mdi-file-image:before{content:"\F021F"}.mdi-file-image-outline:before{content:"\F0EB0"}.mdi-file-import:before{content:"\F0220"}.mdi-file-import-outline:before{content:"\F102F"}.mdi-file-key:before{content:"\F1184"}.mdi-file-key-outline:before{content:"\F1185"}.mdi-file-link:before{content:"\F1177"}.mdi-file-link-outline:before{content:"\F1178"}.mdi-file-lock:before{content:"\F0221"}.mdi-file-lock-outline:before{content:"\F1030"}.mdi-file-move:before{content:"\F0AB9"}.mdi-file-move-outline:before{content:"\F1031"}.mdi-file-multiple:before{content:"\F0222"}.mdi-file-multiple-outline:before{content:"\F1032"}.mdi-file-music:before{content:"\F0223"}.mdi-file-music-outline:before{content:"\F0E2A"}.mdi-file-outline:before{content:"\F0224"}.mdi-file-pdf:before{content:"\F0225"}.mdi-file-pdf-box:before{content:"\F0226"}.mdi-file-pdf-box-outline:before{content:"\F0FB3"}.mdi-file-pdf-outline:before{content:"\F0E2D"}.mdi-file-percent:before{content:"\F081E"}.mdi-file-percent-outline:before{content:"\F1033"}.mdi-file-phone:before{content:"\F1179"}.mdi-file-phone-outline:before{content:"\F117A"}.mdi-file-plus:before{content:"\F0752"}.mdi-file-plus-outline:before{content:"\F0EED"}.mdi-file-powerpoint:before{content:"\F0227"}.mdi-file-powerpoint-box:before{content:"\F0228"}.mdi-file-powerpoint-box-outline:before{content:"\F1034"}.mdi-file-powerpoint-outline:before{content:"\F1035"}.mdi-file-presentation-box:before{content:"\F0229"}.mdi-file-question:before{content:"\F086F"}.mdi-file-question-outline:before{content:"\F1036"}.mdi-file-refresh:before{content:"\F0918"}.mdi-file-refresh-outline:before{content:"\F0541"}.mdi-file-remove:before{content:"\F0B98"}.mdi-file-remove-outline:before{content:"\F1037"}.mdi-file-replace:before{content:"\F0B32"}.mdi-file-replace-outline:before{content:"\F0B33"}.mdi-file-restore:before{content:"\F0670"}.mdi-file-restore-outline:before{content:"\F1038"}.mdi-file-search:before{content:"\F0C7C"}.mdi-file-search-outline:before{content:"\F0C7D"}.mdi-file-send:before{content:"\F022A"}.mdi-file-send-outline:before{content:"\F1039"}.mdi-file-settings:before{content:"\F1079"}.mdi-file-settings-outline:before{content:"\F107A"}.mdi-file-star:before{content:"\F103A"}.mdi-file-star-outline:before{content:"\F103B"}.mdi-file-swap:before{content:"\F0FB4"}.mdi-file-swap-outline:before{content:"\F0FB5"}.mdi-file-sync:before{content:"\F1216"}.mdi-file-sync-outline:before{content:"\F1217"}.mdi-file-table:before{content:"\F0C7E"}.mdi-file-table-box:before{content:"\F10E1"}.mdi-file-table-box-multiple:before{content:"\F10E2"}.mdi-file-table-box-multiple-outline:before{content:"\F10E3"}.mdi-file-table-box-outline:before{content:"\F10E4"}.mdi-file-table-outline:before{content:"\F0C7F"}.mdi-file-tree:before{content:"\F0645"}.mdi-file-tree-outline:before{content:"\F13D2"}.mdi-file-undo:before{content:"\F08DC"}.mdi-file-undo-outline:before{content:"\F103C"}.mdi-file-upload:before{content:"\F0A4D"}.mdi-file-upload-outline:before{content:"\F0A4E"}.mdi-file-video:before{content:"\F022B"}.mdi-file-video-outline:before{content:"\F0E2C"}.mdi-file-word:before{content:"\F022C"}.mdi-file-word-box:before{content:"\F022D"}.mdi-file-word-box-outline:before{content:"\F103D"}.mdi-file-word-outline:before{content:"\F103E"}.mdi-film:before{content:"\F022F"}.mdi-filmstrip:before{content:"\F0230"}.mdi-filmstrip-box:before{content:"\F0332"}.mdi-filmstrip-box-multiple:before{content:"\F0D18"}.mdi-filmstrip-off:before{content:"\F0231"}.mdi-filter:before{content:"\F0232"}.mdi-filter-menu:before{content:"\F10E5"}.mdi-filter-menu-outline:before{content:"\F10E6"}.mdi-filter-minus:before{content:"\F0EEE"}.mdi-filter-minus-outline:before{content:"\F0EEF"}.mdi-filter-off:before{content:"\F14EF"}.mdi-filter-off-outline:before{content:"\F14F0"}.mdi-filter-outline:before{content:"\F0233"}.mdi-filter-plus:before{content:"\F0EF0"}.mdi-filter-plus-outline:before{content:"\F0EF1"}.mdi-filter-remove:before{content:"\F0234"}.mdi-filter-remove-outline:before{content:"\F0235"}.mdi-filter-variant:before{content:"\F0236"}.mdi-filter-variant-minus:before{content:"\F1112"}.mdi-filter-variant-plus:before{content:"\F1113"}.mdi-filter-variant-remove:before{content:"\F103F"}.mdi-finance:before{content:"\F081F"}.mdi-find-replace:before{content:"\F06D4"}.mdi-fingerprint:before{content:"\F0237"}.mdi-fingerprint-off:before{content:"\F0EB1"}.mdi-fire:before{content:"\F0238"}.mdi-fire-alert:before{content:"\F15D7"}.mdi-fire-extinguisher:before{content:"\F0EF2"}.mdi-fire-hydrant:before{content:"\F1137"}.mdi-fire-hydrant-alert:before{content:"\F1138"}.mdi-fire-hydrant-off:before{content:"\F1139"}.mdi-fire-off:before{content:"\F1722"}.mdi-fire-truck:before{content:"\F08AB"}.mdi-firebase:before{content:"\F0967"}.mdi-firefox:before{content:"\F0239"}.mdi-fireplace:before{content:"\F0E2E"}.mdi-fireplace-off:before{content:"\F0E2F"}.mdi-firework:before{content:"\F0E30"}.mdi-firework-off:before{content:"\F1723"}.mdi-fish:before{content:"\F023A"}.mdi-fish-off:before{content:"\F13F3"}.mdi-fishbowl:before{content:"\F0EF3"}.mdi-fishbowl-outline:before{content:"\F0EF4"}.mdi-fit-to-page:before{content:"\F0EF5"}.mdi-fit-to-page-outline:before{content:"\F0EF6"}.mdi-flag:before{content:"\F023B"}.mdi-flag-checkered:before{content:"\F023C"}.mdi-flag-minus:before{content:"\F0B99"}.mdi-flag-minus-outline:before{content:"\F10B2"}.mdi-flag-outline:before{content:"\F023D"}.mdi-flag-plus:before{content:"\F0B9A"}.mdi-flag-plus-outline:before{content:"\F10B3"}.mdi-flag-remove:before{content:"\F0B9B"}.mdi-flag-remove-outline:before{content:"\F10B4"}.mdi-flag-triangle:before{content:"\F023F"}.mdi-flag-variant:before{content:"\F0240"}.mdi-flag-variant-outline:before{content:"\F023E"}.mdi-flare:before{content:"\F0D72"}.mdi-flash:before{content:"\F0241"}.mdi-flash-alert:before{content:"\F0EF7"}.mdi-flash-alert-outline:before{content:"\F0EF8"}.mdi-flash-auto:before{content:"\F0242"}.mdi-flash-circle:before{content:"\F0820"}.mdi-flash-off:before{content:"\F0243"}.mdi-flash-outline:before{content:"\F06D5"}.mdi-flash-red-eye:before{content:"\F067B"}.mdi-flashlight:before{content:"\F0244"}.mdi-flashlight-off:before{content:"\F0245"}.mdi-flask:before{content:"\F0093"}.mdi-flask-empty:before{content:"\F0094"}.mdi-flask-empty-minus:before{content:"\F123A"}.mdi-flask-empty-minus-outline:before{content:"\F123B"}.mdi-flask-empty-off:before{content:"\F13F4"}.mdi-flask-empty-off-outline:before{content:"\F13F5"}.mdi-flask-empty-outline:before{content:"\F0095"}.mdi-flask-empty-plus:before{content:"\F123C"}.mdi-flask-empty-plus-outline:before{content:"\F123D"}.mdi-flask-empty-remove:before{content:"\F123E"}.mdi-flask-empty-remove-outline:before{content:"\F123F"}.mdi-flask-minus:before{content:"\F1240"}.mdi-flask-minus-outline:before{content:"\F1241"}.mdi-flask-off:before{content:"\F13F6"}.mdi-flask-off-outline:before{content:"\F13F7"}.mdi-flask-outline:before{content:"\F0096"}.mdi-flask-plus:before{content:"\F1242"}.mdi-flask-plus-outline:before{content:"\F1243"}.mdi-flask-remove:before{content:"\F1244"}.mdi-flask-remove-outline:before{content:"\F1245"}.mdi-flask-round-bottom:before{content:"\F124B"}.mdi-flask-round-bottom-empty:before{content:"\F124C"}.mdi-flask-round-bottom-empty-outline:before{content:"\F124D"}.mdi-flask-round-bottom-outline:before{content:"\F124E"}.mdi-fleur-de-lis:before{content:"\F1303"}.mdi-flip-horizontal:before{content:"\F10E7"}.mdi-flip-to-back:before{content:"\F0247"}.mdi-flip-to-front:before{content:"\F0248"}.mdi-flip-vertical:before{content:"\F10E8"}.mdi-floor-lamp:before{content:"\F08DD"}.mdi-floor-lamp-dual:before{content:"\F1040"}.mdi-floor-lamp-variant:before{content:"\F1041"}.mdi-floor-plan:before{content:"\F0821"}.mdi-floppy:before{content:"\F0249"}.mdi-floppy-variant:before{content:"\F09EF"}.mdi-flower:before{content:"\F024A"}.mdi-flower-outline:before{content:"\F09F0"}.mdi-flower-poppy:before{content:"\F0D08"}.mdi-flower-tulip:before{content:"\F09F1"}.mdi-flower-tulip-outline:before{content:"\F09F2"}.mdi-focus-auto:before{content:"\F0F4E"}.mdi-focus-field:before{content:"\F0F4F"}.mdi-focus-field-horizontal:before{content:"\F0F50"}.mdi-focus-field-vertical:before{content:"\F0F51"}.mdi-folder:before{content:"\F024B"}.mdi-folder-account:before{content:"\F024C"}.mdi-folder-account-outline:before{content:"\F0B9C"}.mdi-folder-alert:before{content:"\F0DCC"}.mdi-folder-alert-outline:before{content:"\F0DCD"}.mdi-folder-clock:before{content:"\F0ABA"}.mdi-folder-clock-outline:before{content:"\F0ABB"}.mdi-folder-cog:before{content:"\F107F"}.mdi-folder-cog-outline:before{content:"\F1080"}.mdi-folder-download:before{content:"\F024D"}.mdi-folder-download-outline:before{content:"\F10E9"}.mdi-folder-edit:before{content:"\F08DE"}.mdi-folder-edit-outline:before{content:"\F0DCE"}.mdi-folder-google-drive:before{content:"\F024E"}.mdi-folder-heart:before{content:"\F10EA"}.mdi-folder-heart-outline:before{content:"\F10EB"}.mdi-folder-home:before{content:"\F10B5"}.mdi-folder-home-outline:before{content:"\F10B6"}.mdi-folder-image:before{content:"\F024F"}.mdi-folder-information:before{content:"\F10B7"}.mdi-folder-information-outline:before{content:"\F10B8"}.mdi-folder-key:before{content:"\F08AC"}.mdi-folder-key-network:before{content:"\F08AD"}.mdi-folder-key-network-outline:before{content:"\F0C80"}.mdi-folder-key-outline:before{content:"\F10EC"}.mdi-folder-lock:before{content:"\F0250"}.mdi-folder-lock-open:before{content:"\F0251"}.mdi-folder-marker:before{content:"\F126D"}.mdi-folder-marker-outline:before{content:"\F126E"}.mdi-folder-move:before{content:"\F0252"}.mdi-folder-move-outline:before{content:"\F1246"}.mdi-folder-multiple:before{content:"\F0253"}.mdi-folder-multiple-image:before{content:"\F0254"}.mdi-folder-multiple-outline:before{content:"\F0255"}.mdi-folder-multiple-plus:before{content:"\F147E"}.mdi-folder-multiple-plus-outline:before{content:"\F147F"}.mdi-folder-music:before{content:"\F1359"}.mdi-folder-music-outline:before{content:"\F135A"}.mdi-folder-network:before{content:"\F0870"}.mdi-folder-network-outline:before{content:"\F0C81"}.mdi-folder-open:before{content:"\F0770"}.mdi-folder-open-outline:before{content:"\F0DCF"}.mdi-folder-outline:before{content:"\F0256"}.mdi-folder-plus:before{content:"\F0257"}.mdi-folder-plus-outline:before{content:"\F0B9D"}.mdi-folder-pound:before{content:"\F0D09"}.mdi-folder-pound-outline:before{content:"\F0D0A"}.mdi-folder-refresh:before{content:"\F0749"}.mdi-folder-refresh-outline:before{content:"\F0542"}.mdi-folder-remove:before{content:"\F0258"}.mdi-folder-remove-outline:before{content:"\F0B9E"}.mdi-folder-search:before{content:"\F0968"}.mdi-folder-search-outline:before{content:"\F0969"}.mdi-folder-settings:before{content:"\F107D"}.mdi-folder-settings-outline:before{content:"\F107E"}.mdi-folder-star:before{content:"\F069D"}.mdi-folder-star-multiple:before{content:"\F13D3"}.mdi-folder-star-multiple-outline:before{content:"\F13D4"}.mdi-folder-star-outline:before{content:"\F0B9F"}.mdi-folder-swap:before{content:"\F0FB6"}.mdi-folder-swap-outline:before{content:"\F0FB7"}.mdi-folder-sync:before{content:"\F0D0B"}.mdi-folder-sync-outline:before{content:"\F0D0C"}.mdi-folder-table:before{content:"\F12E3"}.mdi-folder-table-outline:before{content:"\F12E4"}.mdi-folder-text:before{content:"\F0C82"}.mdi-folder-text-outline:before{content:"\F0C83"}.mdi-folder-upload:before{content:"\F0259"}.mdi-folder-upload-outline:before{content:"\F10ED"}.mdi-folder-zip:before{content:"\F06EB"}.mdi-folder-zip-outline:before{content:"\F07B9"}.mdi-font-awesome:before{content:"\F003A"}.mdi-food:before{content:"\F025A"}.mdi-food-apple:before{content:"\F025B"}.mdi-food-apple-outline:before{content:"\F0C84"}.mdi-food-croissant:before{content:"\F07C8"}.mdi-food-drumstick:before{content:"\F141F"}.mdi-food-drumstick-off:before{content:"\F1468"}.mdi-food-drumstick-off-outline:before{content:"\F1469"}.mdi-food-drumstick-outline:before{content:"\F1420"}.mdi-food-fork-drink:before{content:"\F05F2"}.mdi-food-halal:before{content:"\F1572"}.mdi-food-kosher:before{content:"\F1573"}.mdi-food-off:before{content:"\F05F3"}.mdi-food-steak:before{content:"\F146A"}.mdi-food-steak-off:before{content:"\F146B"}.mdi-food-turkey:before{content:"\F171C"}.mdi-food-variant:before{content:"\F025C"}.mdi-food-variant-off:before{content:"\F13E5"}.mdi-foot-print:before{content:"\F0F52"}.mdi-football:before{content:"\F025D"}.mdi-football-australian:before{content:"\F025E"}.mdi-football-helmet:before{content:"\F025F"}.mdi-forklift:before{content:"\F07C9"}.mdi-form-dropdown:before{content:"\F1400"}.mdi-form-select:before{content:"\F1401"}.mdi-form-textarea:before{content:"\F1095"}.mdi-form-textbox:before{content:"\F060E"}.mdi-form-textbox-lock:before{content:"\F135D"}.mdi-form-textbox-password:before{content:"\F07F5"}.mdi-format-align-bottom:before{content:"\F0753"}.mdi-format-align-center:before{content:"\F0260"}.mdi-format-align-justify:before{content:"\F0261"}.mdi-format-align-left:before{content:"\F0262"}.mdi-format-align-middle:before{content:"\F0754"}.mdi-format-align-right:before{content:"\F0263"}.mdi-format-align-top:before{content:"\F0755"}.mdi-format-annotation-minus:before{content:"\F0ABC"}.mdi-format-annotation-plus:before{content:"\F0646"}.mdi-format-bold:before{content:"\F0264"}.mdi-format-clear:before{content:"\F0265"}.mdi-format-color-fill:before{content:"\F0266"}.mdi-format-color-highlight:before{content:"\F0E31"}.mdi-format-color-marker-cancel:before{content:"\F1313"}.mdi-format-color-text:before{content:"\F069E"}.mdi-format-columns:before{content:"\F08DF"}.mdi-format-float-center:before{content:"\F0267"}.mdi-format-float-left:before{content:"\F0268"}.mdi-format-float-none:before{content:"\F0269"}.mdi-format-float-right:before{content:"\F026A"}.mdi-format-font:before{content:"\F06D6"}.mdi-format-font-size-decrease:before{content:"\F09F3"}.mdi-format-font-size-increase:before{content:"\F09F4"}.mdi-format-header-1:before{content:"\F026B"}.mdi-format-header-2:before{content:"\F026C"}.mdi-format-header-3:before{content:"\F026D"}.mdi-format-header-4:before{content:"\F026E"}.mdi-format-header-5:before{content:"\F026F"}.mdi-format-header-6:before{content:"\F0270"}.mdi-format-header-decrease:before{content:"\F0271"}.mdi-format-header-equal:before{content:"\F0272"}.mdi-format-header-increase:before{content:"\F0273"}.mdi-format-header-pound:before{content:"\F0274"}.mdi-format-horizontal-align-center:before{content:"\F061E"}.mdi-format-horizontal-align-left:before{content:"\F061F"}.mdi-format-horizontal-align-right:before{content:"\F0620"}.mdi-format-indent-decrease:before{content:"\F0275"}.mdi-format-indent-increase:before{content:"\F0276"}.mdi-format-italic:before{content:"\F0277"}.mdi-format-letter-case:before{content:"\F0B34"}.mdi-format-letter-case-lower:before{content:"\F0B35"}.mdi-format-letter-case-upper:before{content:"\F0B36"}.mdi-format-letter-ends-with:before{content:"\F0FB8"}.mdi-format-letter-matches:before{content:"\F0FB9"}.mdi-format-letter-starts-with:before{content:"\F0FBA"}.mdi-format-line-spacing:before{content:"\F0278"}.mdi-format-line-style:before{content:"\F05C8"}.mdi-format-line-weight:before{content:"\F05C9"}.mdi-format-list-bulleted:before{content:"\F0279"}.mdi-format-list-bulleted-square:before{content:"\F0DD0"}.mdi-format-list-bulleted-triangle:before{content:"\F0EB2"}.mdi-format-list-bulleted-type:before{content:"\F027A"}.mdi-format-list-checkbox:before{content:"\F096A"}.mdi-format-list-checks:before{content:"\F0756"}.mdi-format-list-numbered:before{content:"\F027B"}.mdi-format-list-numbered-rtl:before{content:"\F0D0D"}.mdi-format-list-text:before{content:"\F126F"}.mdi-format-overline:before{content:"\F0EB3"}.mdi-format-page-break:before{content:"\F06D7"}.mdi-format-paint:before{content:"\F027C"}.mdi-format-paragraph:before{content:"\F027D"}.mdi-format-pilcrow:before{content:"\F06D8"}.mdi-format-quote-close:before{content:"\F027E"}.mdi-format-quote-close-outline:before{content:"\F11A8"}.mdi-format-quote-open:before{content:"\F0757"}.mdi-format-quote-open-outline:before{content:"\F11A7"}.mdi-format-rotate-90:before{content:"\F06AA"}.mdi-format-section:before{content:"\F069F"}.mdi-format-size:before{content:"\F027F"}.mdi-format-strikethrough:before{content:"\F0280"}.mdi-format-strikethrough-variant:before{content:"\F0281"}.mdi-format-subscript:before{content:"\F0282"}.mdi-format-superscript:before{content:"\F0283"}.mdi-format-text:before{content:"\F0284"}.mdi-format-text-rotation-angle-down:before{content:"\F0FBB"}.mdi-format-text-rotation-angle-up:before{content:"\F0FBC"}.mdi-format-text-rotation-down:before{content:"\F0D73"}.mdi-format-text-rotation-down-vertical:before{content:"\F0FBD"}.mdi-format-text-rotation-none:before{content:"\F0D74"}.mdi-format-text-rotation-up:before{content:"\F0FBE"}.mdi-format-text-rotation-vertical:before{content:"\F0FBF"}.mdi-format-text-variant:before{content:"\F0E32"}.mdi-format-text-variant-outline:before{content:"\F150F"}.mdi-format-text-wrapping-clip:before{content:"\F0D0E"}.mdi-format-text-wrapping-overflow:before{content:"\F0D0F"}.mdi-format-text-wrapping-wrap:before{content:"\F0D10"}.mdi-format-textbox:before{content:"\F0D11"}.mdi-format-textdirection-l-to-r:before{content:"\F0285"}.mdi-format-textdirection-r-to-l:before{content:"\F0286"}.mdi-format-title:before{content:"\F05F4"}.mdi-format-underline:before{content:"\F0287"}.mdi-format-vertical-align-bottom:before{content:"\F0621"}.mdi-format-vertical-align-center:before{content:"\F0622"}.mdi-format-vertical-align-top:before{content:"\F0623"}.mdi-format-wrap-inline:before{content:"\F0288"}.mdi-format-wrap-square:before{content:"\F0289"}.mdi-format-wrap-tight:before{content:"\F028A"}.mdi-format-wrap-top-bottom:before{content:"\F028B"}.mdi-forum:before{content:"\F028C"}.mdi-forum-outline:before{content:"\F0822"}.mdi-forward:before{content:"\F028D"}.mdi-forwardburger:before{content:"\F0D75"}.mdi-fountain:before{content:"\F096B"}.mdi-fountain-pen:before{content:"\F0D12"}.mdi-fountain-pen-tip:before{content:"\F0D13"}.mdi-freebsd:before{content:"\F08E0"}.mdi-frequently-asked-questions:before{content:"\F0EB4"}.mdi-fridge:before{content:"\F0290"}.mdi-fridge-alert:before{content:"\F11B1"}.mdi-fridge-alert-outline:before{content:"\F11B2"}.mdi-fridge-bottom:before{content:"\F0292"}.mdi-fridge-industrial:before{content:"\F15EE"}.mdi-fridge-industrial-alert:before{content:"\F15EF"}.mdi-fridge-industrial-alert-outline:before{content:"\F15F0"}.mdi-fridge-industrial-off:before{content:"\F15F1"}.mdi-fridge-industrial-off-outline:before{content:"\F15F2"}.mdi-fridge-industrial-outline:before{content:"\F15F3"}.mdi-fridge-off:before{content:"\F11AF"}.mdi-fridge-off-outline:before{content:"\F11B0"}.mdi-fridge-outline:before{content:"\F028F"}.mdi-fridge-top:before{content:"\F0291"}.mdi-fridge-variant:before{content:"\F15F4"}.mdi-fridge-variant-alert:before{content:"\F15F5"}.mdi-fridge-variant-alert-outline:before{content:"\F15F6"}.mdi-fridge-variant-off:before{content:"\F15F7"}.mdi-fridge-variant-off-outline:before{content:"\F15F8"}.mdi-fridge-variant-outline:before{content:"\F15F9"}.mdi-fruit-cherries:before{content:"\F1042"}.mdi-fruit-cherries-off:before{content:"\F13F8"}.mdi-fruit-citrus:before{content:"\F1043"}.mdi-fruit-citrus-off:before{content:"\F13F9"}.mdi-fruit-grapes:before{content:"\F1044"}.mdi-fruit-grapes-outline:before{content:"\F1045"}.mdi-fruit-pineapple:before{content:"\F1046"}.mdi-fruit-watermelon:before{content:"\F1047"}.mdi-fuel:before{content:"\F07CA"}.mdi-fullscreen:before{content:"\F0293"}.mdi-fullscreen-exit:before{content:"\F0294"}.mdi-function:before{content:"\F0295"}.mdi-function-variant:before{content:"\F0871"}.mdi-furigana-horizontal:before{content:"\F1081"}.mdi-furigana-vertical:before{content:"\F1082"}.mdi-fuse:before{content:"\F0C85"}.mdi-fuse-alert:before{content:"\F142D"}.mdi-fuse-blade:before{content:"\F0C86"}.mdi-fuse-off:before{content:"\F142C"}.mdi-gamepad:before{content:"\F0296"}.mdi-gamepad-circle:before{content:"\F0E33"}.mdi-gamepad-circle-down:before{content:"\F0E34"}.mdi-gamepad-circle-left:before{content:"\F0E35"}.mdi-gamepad-circle-outline:before{content:"\F0E36"}.mdi-gamepad-circle-right:before{content:"\F0E37"}.mdi-gamepad-circle-up:before{content:"\F0E38"}.mdi-gamepad-down:before{content:"\F0E39"}.mdi-gamepad-left:before{content:"\F0E3A"}.mdi-gamepad-right:before{content:"\F0E3B"}.mdi-gamepad-round:before{content:"\F0E3C"}.mdi-gamepad-round-down:before{content:"\F0E3D"}.mdi-gamepad-round-left:before{content:"\F0E3E"}.mdi-gamepad-round-outline:before{content:"\F0E3F"}.mdi-gamepad-round-right:before{content:"\F0E40"}.mdi-gamepad-round-up:before{content:"\F0E41"}.mdi-gamepad-square:before{content:"\F0EB5"}.mdi-gamepad-square-outline:before{content:"\F0EB6"}.mdi-gamepad-up:before{content:"\F0E42"}.mdi-gamepad-variant:before{content:"\F0297"}.mdi-gamepad-variant-outline:before{content:"\F0EB7"}.mdi-gamma:before{content:"\F10EE"}.mdi-gantry-crane:before{content:"\F0DD1"}.mdi-garage:before{content:"\F06D9"}.mdi-garage-alert:before{content:"\F0872"}.mdi-garage-alert-variant:before{content:"\F12D5"}.mdi-garage-open:before{content:"\F06DA"}.mdi-garage-open-variant:before{content:"\F12D4"}.mdi-garage-variant:before{content:"\F12D3"}.mdi-gas-cylinder:before{content:"\F0647"}.mdi-gas-station:before{content:"\F0298"}.mdi-gas-station-off:before{content:"\F1409"}.mdi-gas-station-off-outline:before{content:"\F140A"}.mdi-gas-station-outline:before{content:"\F0EB8"}.mdi-gate:before{content:"\F0299"}.mdi-gate-and:before{content:"\F08E1"}.mdi-gate-arrow-right:before{content:"\F1169"}.mdi-gate-nand:before{content:"\F08E2"}.mdi-gate-nor:before{content:"\F08E3"}.mdi-gate-not:before{content:"\F08E4"}.mdi-gate-open:before{content:"\F116A"}.mdi-gate-or:before{content:"\F08E5"}.mdi-gate-xnor:before{content:"\F08E6"}.mdi-gate-xor:before{content:"\F08E7"}.mdi-gatsby:before{content:"\F0E43"}.mdi-gauge:before{content:"\F029A"}.mdi-gauge-empty:before{content:"\F0873"}.mdi-gauge-full:before{content:"\F0874"}.mdi-gauge-low:before{content:"\F0875"}.mdi-gavel:before{content:"\F029B"}.mdi-gender-female:before{content:"\F029C"}.mdi-gender-male:before{content:"\F029D"}.mdi-gender-male-female:before{content:"\F029E"}.mdi-gender-male-female-variant:before{content:"\F113F"}.mdi-gender-non-binary:before{content:"\F1140"}.mdi-gender-transgender:before{content:"\F029F"}.mdi-gentoo:before{content:"\F08E8"}.mdi-gesture:before{content:"\F07CB"}.mdi-gesture-double-tap:before{content:"\F073C"}.mdi-gesture-pinch:before{content:"\F0ABD"}.mdi-gesture-spread:before{content:"\F0ABE"}.mdi-gesture-swipe:before{content:"\F0D76"}.mdi-gesture-swipe-down:before{content:"\F073D"}.mdi-gesture-swipe-horizontal:before{content:"\F0ABF"}.mdi-gesture-swipe-left:before{content:"\F073E"}.mdi-gesture-swipe-right:before{content:"\F073F"}.mdi-gesture-swipe-up:before{content:"\F0740"}.mdi-gesture-swipe-vertical:before{content:"\F0AC0"}.mdi-gesture-tap:before{content:"\F0741"}.mdi-gesture-tap-box:before{content:"\F12A9"}.mdi-gesture-tap-button:before{content:"\F12A8"}.mdi-gesture-tap-hold:before{content:"\F0D77"}.mdi-gesture-two-double-tap:before{content:"\F0742"}.mdi-gesture-two-tap:before{content:"\F0743"}.mdi-ghost:before{content:"\F02A0"}.mdi-ghost-off:before{content:"\F09F5"}.mdi-ghost-off-outline:before{content:"\F165C"}.mdi-ghost-outline:before{content:"\F165D"}.mdi-gif:before{content:"\F0D78"}.mdi-gift:before{content:"\F0E44"}.mdi-gift-off:before{content:"\F16EF"}.mdi-gift-off-outline:before{content:"\F16F0"}.mdi-gift-open:before{content:"\F16F1"}.mdi-gift-open-outline:before{content:"\F16F2"}.mdi-gift-outline:before{content:"\F02A1"}.mdi-git:before{content:"\F02A2"}.mdi-github:before{content:"\F02A4"}.mdi-gitlab:before{content:"\F0BA0"}.mdi-glass-cocktail:before{content:"\F0356"}.mdi-glass-cocktail-off:before{content:"\F15E6"}.mdi-glass-flute:before{content:"\F02A5"}.mdi-glass-mug:before{content:"\F02A6"}.mdi-glass-mug-off:before{content:"\F15E7"}.mdi-glass-mug-variant:before{content:"\F1116"}.mdi-glass-mug-variant-off:before{content:"\F15E8"}.mdi-glass-pint-outline:before{content:"\F130D"}.mdi-glass-stange:before{content:"\F02A7"}.mdi-glass-tulip:before{content:"\F02A8"}.mdi-glass-wine:before{content:"\F0876"}.mdi-glasses:before{content:"\F02AA"}.mdi-globe-light:before{content:"\F12D7"}.mdi-globe-model:before{content:"\F08E9"}.mdi-gmail:before{content:"\F02AB"}.mdi-gnome:before{content:"\F02AC"}.mdi-go-kart:before{content:"\F0D79"}.mdi-go-kart-track:before{content:"\F0D7A"}.mdi-gog:before{content:"\F0BA1"}.mdi-gold:before{content:"\F124F"}.mdi-golf:before{content:"\F0823"}.mdi-golf-cart:before{content:"\F11A4"}.mdi-golf-tee:before{content:"\F1083"}.mdi-gondola:before{content:"\F0686"}.mdi-goodreads:before{content:"\F0D7B"}.mdi-google:before{content:"\F02AD"}.mdi-google-ads:before{content:"\F0C87"}.mdi-google-analytics:before{content:"\F07CC"}.mdi-google-assistant:before{content:"\F07CD"}.mdi-google-cardboard:before{content:"\F02AE"}.mdi-google-chrome:before{content:"\F02AF"}.mdi-google-circles:before{content:"\F02B0"}.mdi-google-circles-communities:before{content:"\F02B1"}.mdi-google-circles-extended:before{content:"\F02B2"}.mdi-google-circles-group:before{content:"\F02B3"}.mdi-google-classroom:before{content:"\F02C0"}.mdi-google-cloud:before{content:"\F11F6"}.mdi-google-controller:before{content:"\F02B4"}.mdi-google-controller-off:before{content:"\F02B5"}.mdi-google-downasaur:before{content:"\F1362"}.mdi-google-drive:before{content:"\F02B6"}.mdi-google-earth:before{content:"\F02B7"}.mdi-google-fit:before{content:"\F096C"}.mdi-google-glass:before{content:"\F02B8"}.mdi-google-hangouts:before{content:"\F02C9"}.mdi-google-home:before{content:"\F0824"}.mdi-google-keep:before{content:"\F06DC"}.mdi-google-lens:before{content:"\F09F6"}.mdi-google-maps:before{content:"\F05F5"}.mdi-google-my-business:before{content:"\F1048"}.mdi-google-nearby:before{content:"\F02B9"}.mdi-google-photos:before{content:"\F06DD"}.mdi-google-play:before{content:"\F02BC"}.mdi-google-plus:before{content:"\F02BD"}.mdi-google-podcast:before{content:"\F0EB9"}.mdi-google-spreadsheet:before{content:"\F09F7"}.mdi-google-street-view:before{content:"\F0C88"}.mdi-google-translate:before{content:"\F02BF"}.mdi-gradient:before{content:"\F06A0"}.mdi-grain:before{content:"\F0D7C"}.mdi-graph:before{content:"\F1049"}.mdi-graph-outline:before{content:"\F104A"}.mdi-graphql:before{content:"\F0877"}.mdi-grass:before{content:"\F1510"}.mdi-grave-stone:before{content:"\F0BA2"}.mdi-grease-pencil:before{content:"\F0648"}.mdi-greater-than:before{content:"\F096D"}.mdi-greater-than-or-equal:before{content:"\F096E"}.mdi-grid:before{content:"\F02C1"}.mdi-grid-large:before{content:"\F0758"}.mdi-grid-off:before{content:"\F02C2"}.mdi-grill:before{content:"\F0E45"}.mdi-grill-outline:before{content:"\F118A"}.mdi-group:before{content:"\F02C3"}.mdi-guitar-acoustic:before{content:"\F0771"}.mdi-guitar-electric:before{content:"\F02C4"}.mdi-guitar-pick:before{content:"\F02C5"}.mdi-guitar-pick-outline:before{content:"\F02C6"}.mdi-guy-fawkes-mask:before{content:"\F0825"}.mdi-hail:before{content:"\F0AC1"}.mdi-hair-dryer:before{content:"\F10EF"}.mdi-hair-dryer-outline:before{content:"\F10F0"}.mdi-halloween:before{content:"\F0BA3"}.mdi-hamburger:before{content:"\F0685"}.mdi-hammer:before{content:"\F08EA"}.mdi-hammer-screwdriver:before{content:"\F1322"}.mdi-hammer-wrench:before{content:"\F1323"}.mdi-hand:before{content:"\F0A4F"}.mdi-hand-heart:before{content:"\F10F1"}.mdi-hand-heart-outline:before{content:"\F157E"}.mdi-hand-left:before{content:"\F0E46"}.mdi-hand-okay:before{content:"\F0A50"}.mdi-hand-peace:before{content:"\F0A51"}.mdi-hand-peace-variant:before{content:"\F0A52"}.mdi-hand-pointing-down:before{content:"\F0A53"}.mdi-hand-pointing-left:before{content:"\F0A54"}.mdi-hand-pointing-right:before{content:"\F02C7"}.mdi-hand-pointing-up:before{content:"\F0A55"}.mdi-hand-right:before{content:"\F0E47"}.mdi-hand-saw:before{content:"\F0E48"}.mdi-hand-wash:before{content:"\F157F"}.mdi-hand-wash-outline:before{content:"\F1580"}.mdi-hand-water:before{content:"\F139F"}.mdi-handball:before{content:"\F0F53"}.mdi-handcuffs:before{content:"\F113E"}.mdi-handshake:before{content:"\F1218"}.mdi-handshake-outline:before{content:"\F15A1"}.mdi-hanger:before{content:"\F02C8"}.mdi-hard-hat:before{content:"\F096F"}.mdi-harddisk:before{content:"\F02CA"}.mdi-harddisk-plus:before{content:"\F104B"}.mdi-harddisk-remove:before{content:"\F104C"}.mdi-hat-fedora:before{content:"\F0BA4"}.mdi-hazard-lights:before{content:"\F0C89"}.mdi-hdr:before{content:"\F0D7D"}.mdi-hdr-off:before{content:"\F0D7E"}.mdi-head:before{content:"\F135E"}.mdi-head-alert:before{content:"\F1338"}.mdi-head-alert-outline:before{content:"\F1339"}.mdi-head-check:before{content:"\F133A"}.mdi-head-check-outline:before{content:"\F133B"}.mdi-head-cog:before{content:"\F133C"}.mdi-head-cog-outline:before{content:"\F133D"}.mdi-head-dots-horizontal:before{content:"\F133E"}.mdi-head-dots-horizontal-outline:before{content:"\F133F"}.mdi-head-flash:before{content:"\F1340"}.mdi-head-flash-outline:before{content:"\F1341"}.mdi-head-heart:before{content:"\F1342"}.mdi-head-heart-outline:before{content:"\F1343"}.mdi-head-lightbulb:before{content:"\F1344"}.mdi-head-lightbulb-outline:before{content:"\F1345"}.mdi-head-minus:before{content:"\F1346"}.mdi-head-minus-outline:before{content:"\F1347"}.mdi-head-outline:before{content:"\F135F"}.mdi-head-plus:before{content:"\F1348"}.mdi-head-plus-outline:before{content:"\F1349"}.mdi-head-question:before{content:"\F134A"}.mdi-head-question-outline:before{content:"\F134B"}.mdi-head-remove:before{content:"\F134C"}.mdi-head-remove-outline:before{content:"\F134D"}.mdi-head-snowflake:before{content:"\F134E"}.mdi-head-snowflake-outline:before{content:"\F134F"}.mdi-head-sync:before{content:"\F1350"}.mdi-head-sync-outline:before{content:"\F1351"}.mdi-headphones:before{content:"\F02CB"}.mdi-headphones-bluetooth:before{content:"\F0970"}.mdi-headphones-box:before{content:"\F02CC"}.mdi-headphones-off:before{content:"\F07CE"}.mdi-headphones-settings:before{content:"\F02CD"}.mdi-headset:before{content:"\F02CE"}.mdi-headset-dock:before{content:"\F02CF"}.mdi-headset-off:before{content:"\F02D0"}.mdi-heart:before{content:"\F02D1"}.mdi-heart-box:before{content:"\F02D2"}.mdi-heart-box-outline:before{content:"\F02D3"}.mdi-heart-broken:before{content:"\F02D4"}.mdi-heart-broken-outline:before{content:"\F0D14"}.mdi-heart-circle:before{content:"\F0971"}.mdi-heart-circle-outline:before{content:"\F0972"}.mdi-heart-cog:before{content:"\F1663"}.mdi-heart-cog-outline:before{content:"\F1664"}.mdi-heart-flash:before{content:"\F0EF9"}.mdi-heart-half:before{content:"\F06DF"}.mdi-heart-half-full:before{content:"\F06DE"}.mdi-heart-half-outline:before{content:"\F06E0"}.mdi-heart-minus:before{content:"\F142F"}.mdi-heart-minus-outline:before{content:"\F1432"}.mdi-heart-multiple:before{content:"\F0A56"}.mdi-heart-multiple-outline:before{content:"\F0A57"}.mdi-heart-off:before{content:"\F0759"}.mdi-heart-off-outline:before{content:"\F1434"}.mdi-heart-outline:before{content:"\F02D5"}.mdi-heart-plus:before{content:"\F142E"}.mdi-heart-plus-outline:before{content:"\F1431"}.mdi-heart-pulse:before{content:"\F05F6"}.mdi-heart-remove:before{content:"\F1430"}.mdi-heart-remove-outline:before{content:"\F1433"}.mdi-heart-settings:before{content:"\F1665"}.mdi-heart-settings-outline:before{content:"\F1666"}.mdi-helicopter:before{content:"\F0AC2"}.mdi-help:before{content:"\F02D6"}.mdi-help-box:before{content:"\F078B"}.mdi-help-circle:before{content:"\F02D7"}.mdi-help-circle-outline:before{content:"\F0625"}.mdi-help-network:before{content:"\F06F5"}.mdi-help-network-outline:before{content:"\F0C8A"}.mdi-help-rhombus:before{content:"\F0BA5"}.mdi-help-rhombus-outline:before{content:"\F0BA6"}.mdi-hexadecimal:before{content:"\F12A7"}.mdi-hexagon:before{content:"\F02D8"}.mdi-hexagon-multiple:before{content:"\F06E1"}.mdi-hexagon-multiple-outline:before{content:"\F10F2"}.mdi-hexagon-outline:before{content:"\F02D9"}.mdi-hexagon-slice-1:before{content:"\F0AC3"}.mdi-hexagon-slice-2:before{content:"\F0AC4"}.mdi-hexagon-slice-3:before{content:"\F0AC5"}.mdi-hexagon-slice-4:before{content:"\F0AC6"}.mdi-hexagon-slice-5:before{content:"\F0AC7"}.mdi-hexagon-slice-6:before{content:"\F0AC8"}.mdi-hexagram:before{content:"\F0AC9"}.mdi-hexagram-outline:before{content:"\F0ACA"}.mdi-high-definition:before{content:"\F07CF"}.mdi-high-definition-box:before{content:"\F0878"}.mdi-highway:before{content:"\F05F7"}.mdi-hiking:before{content:"\F0D7F"}.mdi-hinduism:before{content:"\F0973"}.mdi-history:before{content:"\F02DA"}.mdi-hockey-puck:before{content:"\F0879"}.mdi-hockey-sticks:before{content:"\F087A"}.mdi-hololens:before{content:"\F02DB"}.mdi-home:before{content:"\F02DC"}.mdi-home-account:before{content:"\F0826"}.mdi-home-alert:before{content:"\F087B"}.mdi-home-alert-outline:before{content:"\F15D0"}.mdi-home-analytics:before{content:"\F0EBA"}.mdi-home-assistant:before{content:"\F07D0"}.mdi-home-automation:before{content:"\F07D1"}.mdi-home-circle:before{content:"\F07D2"}.mdi-home-circle-outline:before{content:"\F104D"}.mdi-home-city:before{content:"\F0D15"}.mdi-home-city-outline:before{content:"\F0D16"}.mdi-home-currency-usd:before{content:"\F08AF"}.mdi-home-edit:before{content:"\F1159"}.mdi-home-edit-outline:before{content:"\F115A"}.mdi-home-export-outline:before{content:"\F0F9B"}.mdi-home-flood:before{content:"\F0EFA"}.mdi-home-floor-0:before{content:"\F0DD2"}.mdi-home-floor-1:before{content:"\F0D80"}.mdi-home-floor-2:before{content:"\F0D81"}.mdi-home-floor-3:before{content:"\F0D82"}.mdi-home-floor-a:before{content:"\F0D83"}.mdi-home-floor-b:before{content:"\F0D84"}.mdi-home-floor-g:before{content:"\F0D85"}.mdi-home-floor-l:before{content:"\F0D86"}.mdi-home-floor-negative-1:before{content:"\F0DD3"}.mdi-home-group:before{content:"\F0DD4"}.mdi-home-heart:before{content:"\F0827"}.mdi-home-import-outline:before{content:"\F0F9C"}.mdi-home-lightbulb:before{content:"\F1251"}.mdi-home-lightbulb-outline:before{content:"\F1252"}.mdi-home-lock:before{content:"\F08EB"}.mdi-home-lock-open:before{content:"\F08EC"}.mdi-home-map-marker:before{content:"\F05F8"}.mdi-home-minus:before{content:"\F0974"}.mdi-home-minus-outline:before{content:"\F13D5"}.mdi-home-modern:before{content:"\F02DD"}.mdi-home-outline:before{content:"\F06A1"}.mdi-home-plus:before{content:"\F0975"}.mdi-home-plus-outline:before{content:"\F13D6"}.mdi-home-remove:before{content:"\F1247"}.mdi-home-remove-outline:before{content:"\F13D7"}.mdi-home-roof:before{content:"\F112B"}.mdi-home-search:before{content:"\F13B0"}.mdi-home-search-outline:before{content:"\F13B1"}.mdi-home-thermometer:before{content:"\F0F54"}.mdi-home-thermometer-outline:before{content:"\F0F55"}.mdi-home-variant:before{content:"\F02DE"}.mdi-home-variant-outline:before{content:"\F0BA7"}.mdi-hook:before{content:"\F06E2"}.mdi-hook-off:before{content:"\F06E3"}.mdi-hops:before{content:"\F02DF"}.mdi-horizontal-rotate-clockwise:before{content:"\F10F3"}.mdi-horizontal-rotate-counterclockwise:before{content:"\F10F4"}.mdi-horse:before{content:"\F15BF"}.mdi-horse-human:before{content:"\F15C0"}.mdi-horse-variant:before{content:"\F15C1"}.mdi-horseshoe:before{content:"\F0A58"}.mdi-hospital:before{content:"\F0FF6"}.mdi-hospital-box:before{content:"\F02E0"}.mdi-hospital-box-outline:before{content:"\F0FF7"}.mdi-hospital-building:before{content:"\F02E1"}.mdi-hospital-marker:before{content:"\F02E2"}.mdi-hot-tub:before{content:"\F0828"}.mdi-hours-24:before{content:"\F1478"}.mdi-hubspot:before{content:"\F0D17"}.mdi-hulu:before{content:"\F0829"}.mdi-human:before{content:"\F02E6"}.mdi-human-baby-changing-table:before{content:"\F138B"}.mdi-human-cane:before{content:"\F1581"}.mdi-human-capacity-decrease:before{content:"\F159B"}.mdi-human-capacity-increase:before{content:"\F159C"}.mdi-human-child:before{content:"\F02E7"}.mdi-human-edit:before{content:"\F14E8"}.mdi-human-female:before{content:"\F0649"}.mdi-human-female-boy:before{content:"\F0A59"}.mdi-human-female-dance:before{content:"\F15C9"}.mdi-human-female-female:before{content:"\F0A5A"}.mdi-human-female-girl:before{content:"\F0A5B"}.mdi-human-greeting:before{content:"\F064A"}.mdi-human-greeting-proximity:before{content:"\F159D"}.mdi-human-handsdown:before{content:"\F064B"}.mdi-human-handsup:before{content:"\F064C"}.mdi-human-male:before{content:"\F064D"}.mdi-human-male-boy:before{content:"\F0A5C"}.mdi-human-male-child:before{content:"\F138C"}.mdi-human-male-female:before{content:"\F02E8"}.mdi-human-male-girl:before{content:"\F0A5D"}.mdi-human-male-height:before{content:"\F0EFB"}.mdi-human-male-height-variant:before{content:"\F0EFC"}.mdi-human-male-male:before{content:"\F0A5E"}.mdi-human-pregnant:before{content:"\F05CF"}.mdi-human-queue:before{content:"\F1571"}.mdi-human-scooter:before{content:"\F11E9"}.mdi-human-wheelchair:before{content:"\F138D"}.mdi-humble-bundle:before{content:"\F0744"}.mdi-hvac:before{content:"\F1352"}.mdi-hvac-off:before{content:"\F159E"}.mdi-hydraulic-oil-level:before{content:"\F1324"}.mdi-hydraulic-oil-temperature:before{content:"\F1325"}.mdi-hydro-power:before{content:"\F12E5"}.mdi-ice-cream:before{content:"\F082A"}.mdi-ice-cream-off:before{content:"\F0E52"}.mdi-ice-pop:before{content:"\F0EFD"}.mdi-id-card:before{content:"\F0FC0"}.mdi-identifier:before{content:"\F0EFE"}.mdi-ideogram-cjk:before{content:"\F1331"}.mdi-ideogram-cjk-variant:before{content:"\F1332"}.mdi-iframe:before{content:"\F0C8B"}.mdi-iframe-array:before{content:"\F10F5"}.mdi-iframe-array-outline:before{content:"\F10F6"}.mdi-iframe-braces:before{content:"\F10F7"}.mdi-iframe-braces-outline:before{content:"\F10F8"}.mdi-iframe-outline:before{content:"\F0C8C"}.mdi-iframe-parentheses:before{content:"\F10F9"}.mdi-iframe-parentheses-outline:before{content:"\F10FA"}.mdi-iframe-variable:before{content:"\F10FB"}.mdi-iframe-variable-outline:before{content:"\F10FC"}.mdi-image:before{content:"\F02E9"}.mdi-image-album:before{content:"\F02EA"}.mdi-image-area:before{content:"\F02EB"}.mdi-image-area-close:before{content:"\F02EC"}.mdi-image-auto-adjust:before{content:"\F0FC1"}.mdi-image-broken:before{content:"\F02ED"}.mdi-image-broken-variant:before{content:"\F02EE"}.mdi-image-edit:before{content:"\F11E3"}.mdi-image-edit-outline:before{content:"\F11E4"}.mdi-image-filter-black-white:before{content:"\F02F0"}.mdi-image-filter-center-focus:before{content:"\F02F1"}.mdi-image-filter-center-focus-strong:before{content:"\F0EFF"}.mdi-image-filter-center-focus-strong-outline:before{content:"\F0F00"}.mdi-image-filter-center-focus-weak:before{content:"\F02F2"}.mdi-image-filter-drama:before{content:"\F02F3"}.mdi-image-filter-frames:before{content:"\F02F4"}.mdi-image-filter-hdr:before{content:"\F02F5"}.mdi-image-filter-none:before{content:"\F02F6"}.mdi-image-filter-tilt-shift:before{content:"\F02F7"}.mdi-image-filter-vintage:before{content:"\F02F8"}.mdi-image-frame:before{content:"\F0E49"}.mdi-image-minus:before{content:"\F1419"}.mdi-image-move:before{content:"\F09F8"}.mdi-image-multiple:before{content:"\F02F9"}.mdi-image-multiple-outline:before{content:"\F02EF"}.mdi-image-off:before{content:"\F082B"}.mdi-image-off-outline:before{content:"\F11D1"}.mdi-image-outline:before{content:"\F0976"}.mdi-image-plus:before{content:"\F087C"}.mdi-image-remove:before{content:"\F1418"}.mdi-image-search:before{content:"\F0977"}.mdi-image-search-outline:before{content:"\F0978"}.mdi-image-size-select-actual:before{content:"\F0C8D"}.mdi-image-size-select-large:before{content:"\F0C8E"}.mdi-image-size-select-small:before{content:"\F0C8F"}.mdi-image-text:before{content:"\F160D"}.mdi-import:before{content:"\F02FA"}.mdi-inbox:before{content:"\F0687"}.mdi-inbox-arrow-down:before{content:"\F02FB"}.mdi-inbox-arrow-down-outline:before{content:"\F1270"}.mdi-inbox-arrow-up:before{content:"\F03D1"}.mdi-inbox-arrow-up-outline:before{content:"\F1271"}.mdi-inbox-full:before{content:"\F1272"}.mdi-inbox-full-outline:before{content:"\F1273"}.mdi-inbox-multiple:before{content:"\F08B0"}.mdi-inbox-multiple-outline:before{content:"\F0BA8"}.mdi-inbox-outline:before{content:"\F1274"}.mdi-inbox-remove:before{content:"\F159F"}.mdi-inbox-remove-outline:before{content:"\F15A0"}.mdi-incognito:before{content:"\F05F9"}.mdi-incognito-circle:before{content:"\F1421"}.mdi-incognito-circle-off:before{content:"\F1422"}.mdi-incognito-off:before{content:"\F0075"}.mdi-infinity:before{content:"\F06E4"}.mdi-information:before{content:"\F02FC"}.mdi-information-outline:before{content:"\F02FD"}.mdi-information-variant:before{content:"\F064E"}.mdi-instagram:before{content:"\F02FE"}.mdi-instrument-triangle:before{content:"\F104E"}.mdi-invert-colors:before{content:"\F0301"}.mdi-invert-colors-off:before{content:"\F0E4A"}.mdi-iobroker:before{content:"\F12E8"}.mdi-ip:before{content:"\F0A5F"}.mdi-ip-network:before{content:"\F0A60"}.mdi-ip-network-outline:before{content:"\F0C90"}.mdi-ipod:before{content:"\F0C91"}.mdi-islam:before{content:"\F0979"}.mdi-island:before{content:"\F104F"}.mdi-iv-bag:before{content:"\F10B9"}.mdi-jabber:before{content:"\F0DD5"}.mdi-jeepney:before{content:"\F0302"}.mdi-jellyfish:before{content:"\F0F01"}.mdi-jellyfish-outline:before{content:"\F0F02"}.mdi-jira:before{content:"\F0303"}.mdi-jquery:before{content:"\F087D"}.mdi-jsfiddle:before{content:"\F0304"}.mdi-judaism:before{content:"\F097A"}.mdi-jump-rope:before{content:"\F12FF"}.mdi-kabaddi:before{content:"\F0D87"}.mdi-kangaroo:before{content:"\F1558"}.mdi-karate:before{content:"\F082C"}.mdi-keg:before{content:"\F0305"}.mdi-kettle:before{content:"\F05FA"}.mdi-kettle-alert:before{content:"\F1317"}.mdi-kettle-alert-outline:before{content:"\F1318"}.mdi-kettle-off:before{content:"\F131B"}.mdi-kettle-off-outline:before{content:"\F131C"}.mdi-kettle-outline:before{content:"\F0F56"}.mdi-kettle-pour-over:before{content:"\F173C"}.mdi-kettle-steam:before{content:"\F1319"}.mdi-kettle-steam-outline:before{content:"\F131A"}.mdi-kettlebell:before{content:"\F1300"}.mdi-key:before{content:"\F0306"}.mdi-key-arrow-right:before{content:"\F1312"}.mdi-key-chain:before{content:"\F1574"}.mdi-key-chain-variant:before{content:"\F1575"}.mdi-key-change:before{content:"\F0307"}.mdi-key-link:before{content:"\F119F"}.mdi-key-minus:before{content:"\F0308"}.mdi-key-outline:before{content:"\F0DD6"}.mdi-key-plus:before{content:"\F0309"}.mdi-key-remove:before{content:"\F030A"}.mdi-key-star:before{content:"\F119E"}.mdi-key-variant:before{content:"\F030B"}.mdi-key-wireless:before{content:"\F0FC2"}.mdi-keyboard:before{content:"\F030C"}.mdi-keyboard-backspace:before{content:"\F030D"}.mdi-keyboard-caps:before{content:"\F030E"}.mdi-keyboard-close:before{content:"\F030F"}.mdi-keyboard-esc:before{content:"\F12B7"}.mdi-keyboard-f1:before{content:"\F12AB"}.mdi-keyboard-f10:before{content:"\F12B4"}.mdi-keyboard-f11:before{content:"\F12B5"}.mdi-keyboard-f12:before{content:"\F12B6"}.mdi-keyboard-f2:before{content:"\F12AC"}.mdi-keyboard-f3:before{content:"\F12AD"}.mdi-keyboard-f4:before{content:"\F12AE"}.mdi-keyboard-f5:before{content:"\F12AF"}.mdi-keyboard-f6:before{content:"\F12B0"}.mdi-keyboard-f7:before{content:"\F12B1"}.mdi-keyboard-f8:before{content:"\F12B2"}.mdi-keyboard-f9:before{content:"\F12B3"}.mdi-keyboard-off:before{content:"\F0310"}.mdi-keyboard-off-outline:before{content:"\F0E4B"}.mdi-keyboard-outline:before{content:"\F097B"}.mdi-keyboard-return:before{content:"\F0311"}.mdi-keyboard-settings:before{content:"\F09F9"}.mdi-keyboard-settings-outline:before{content:"\F09FA"}.mdi-keyboard-space:before{content:"\F1050"}.mdi-keyboard-tab:before{content:"\F0312"}.mdi-keyboard-variant:before{content:"\F0313"}.mdi-khanda:before{content:"\F10FD"}.mdi-kickstarter:before{content:"\F0745"}.mdi-klingon:before{content:"\F135B"}.mdi-knife:before{content:"\F09FB"}.mdi-knife-military:before{content:"\F09FC"}.mdi-koala:before{content:"\F173F"}.mdi-kodi:before{content:"\F0314"}.mdi-kubernetes:before{content:"\F10FE"}.mdi-label:before{content:"\F0315"}.mdi-label-multiple:before{content:"\F1375"}.mdi-label-multiple-outline:before{content:"\F1376"}.mdi-label-off:before{content:"\F0ACB"}.mdi-label-off-outline:before{content:"\F0ACC"}.mdi-label-outline:before{content:"\F0316"}.mdi-label-percent:before{content:"\F12EA"}.mdi-label-percent-outline:before{content:"\F12EB"}.mdi-label-variant:before{content:"\F0ACD"}.mdi-label-variant-outline:before{content:"\F0ACE"}.mdi-ladder:before{content:"\F15A2"}.mdi-ladybug:before{content:"\F082D"}.mdi-lambda:before{content:"\F0627"}.mdi-lamp:before{content:"\F06B5"}.mdi-lamps:before{content:"\F1576"}.mdi-lan:before{content:"\F0317"}.mdi-lan-check:before{content:"\F12AA"}.mdi-lan-connect:before{content:"\F0318"}.mdi-lan-disconnect:before{content:"\F0319"}.mdi-lan-pending:before{content:"\F031A"}.mdi-language-c:before{content:"\F0671"}.mdi-language-cpp:before{content:"\F0672"}.mdi-language-csharp:before{content:"\F031B"}.mdi-language-css3:before{content:"\F031C"}.mdi-language-fortran:before{content:"\F121A"}.mdi-language-go:before{content:"\F07D3"}.mdi-language-haskell:before{content:"\F0C92"}.mdi-language-html5:before{content:"\F031D"}.mdi-language-java:before{content:"\F0B37"}.mdi-language-javascript:before{content:"\F031E"}.mdi-language-kotlin:before{content:"\F1219"}.mdi-language-lua:before{content:"\F08B1"}.mdi-language-markdown:before{content:"\F0354"}.mdi-language-markdown-outline:before{content:"\F0F5B"}.mdi-language-php:before{content:"\F031F"}.mdi-language-python:before{content:"\F0320"}.mdi-language-r:before{content:"\F07D4"}.mdi-language-ruby:before{content:"\F0D2D"}.mdi-language-ruby-on-rails:before{content:"\F0ACF"}.mdi-language-rust:before{content:"\F1617"}.mdi-language-swift:before{content:"\F06E5"}.mdi-language-typescript:before{content:"\F06E6"}.mdi-language-xaml:before{content:"\F0673"}.mdi-laptop:before{content:"\F0322"}.mdi-laptop-chromebook:before{content:"\F0323"}.mdi-laptop-mac:before{content:"\F0324"}.mdi-laptop-off:before{content:"\F06E7"}.mdi-laptop-windows:before{content:"\F0325"}.mdi-laravel:before{content:"\F0AD0"}.mdi-laser-pointer:before{content:"\F1484"}.mdi-lasso:before{content:"\F0F03"}.mdi-lastpass:before{content:"\F0446"}.mdi-latitude:before{content:"\F0F57"}.mdi-launch:before{content:"\F0327"}.mdi-lava-lamp:before{content:"\F07D5"}.mdi-layers:before{content:"\F0328"}.mdi-layers-minus:before{content:"\F0E4C"}.mdi-layers-off:before{content:"\F0329"}.mdi-layers-off-outline:before{content:"\F09FD"}.mdi-layers-outline:before{content:"\F09FE"}.mdi-layers-plus:before{content:"\F0E4D"}.mdi-layers-remove:before{content:"\F0E4E"}.mdi-layers-search:before{content:"\F1206"}.mdi-layers-search-outline:before{content:"\F1207"}.mdi-layers-triple:before{content:"\F0F58"}.mdi-layers-triple-outline:before{content:"\F0F59"}.mdi-lead-pencil:before{content:"\F064F"}.mdi-leaf:before{content:"\F032A"}.mdi-leaf-maple:before{content:"\F0C93"}.mdi-leaf-maple-off:before{content:"\F12DA"}.mdi-leaf-off:before{content:"\F12D9"}.mdi-leak:before{content:"\F0DD7"}.mdi-leak-off:before{content:"\F0DD8"}.mdi-led-off:before{content:"\F032B"}.mdi-led-on:before{content:"\F032C"}.mdi-led-outline:before{content:"\F032D"}.mdi-led-strip:before{content:"\F07D6"}.mdi-led-strip-variant:before{content:"\F1051"}.mdi-led-variant-off:before{content:"\F032E"}.mdi-led-variant-on:before{content:"\F032F"}.mdi-led-variant-outline:before{content:"\F0330"}.mdi-leek:before{content:"\F117D"}.mdi-less-than:before{content:"\F097C"}.mdi-less-than-or-equal:before{content:"\F097D"}.mdi-library:before{content:"\F0331"}.mdi-library-shelves:before{content:"\F0BA9"}.mdi-license:before{content:"\F0FC3"}.mdi-lifebuoy:before{content:"\F087E"}.mdi-light-switch:before{content:"\F097E"}.mdi-lightbulb:before{content:"\F0335"}.mdi-lightbulb-cfl:before{content:"\F1208"}.mdi-lightbulb-cfl-off:before{content:"\F1209"}.mdi-lightbulb-cfl-spiral:before{content:"\F1275"}.mdi-lightbulb-cfl-spiral-off:before{content:"\F12C3"}.mdi-lightbulb-group:before{content:"\F1253"}.mdi-lightbulb-group-off:before{content:"\F12CD"}.mdi-lightbulb-group-off-outline:before{content:"\F12CE"}.mdi-lightbulb-group-outline:before{content:"\F1254"}.mdi-lightbulb-multiple:before{content:"\F1255"}.mdi-lightbulb-multiple-off:before{content:"\F12CF"}.mdi-lightbulb-multiple-off-outline:before{content:"\F12D0"}.mdi-lightbulb-multiple-outline:before{content:"\F1256"}.mdi-lightbulb-off:before{content:"\F0E4F"}.mdi-lightbulb-off-outline:before{content:"\F0E50"}.mdi-lightbulb-on:before{content:"\F06E8"}.mdi-lightbulb-on-outline:before{content:"\F06E9"}.mdi-lightbulb-outline:before{content:"\F0336"}.mdi-lighthouse:before{content:"\F09FF"}.mdi-lighthouse-on:before{content:"\F0A00"}.mdi-lightning-bolt:before{content:"\F140B"}.mdi-lightning-bolt-outline:before{content:"\F140C"}.mdi-lingerie:before{content:"\F1476"}.mdi-link:before{content:"\F0337"}.mdi-link-box:before{content:"\F0D1A"}.mdi-link-box-outline:before{content:"\F0D1B"}.mdi-link-box-variant:before{content:"\F0D1C"}.mdi-link-box-variant-outline:before{content:"\F0D1D"}.mdi-link-lock:before{content:"\F10BA"}.mdi-link-off:before{content:"\F0338"}.mdi-link-plus:before{content:"\F0C94"}.mdi-link-variant:before{content:"\F0339"}.mdi-link-variant-minus:before{content:"\F10FF"}.mdi-link-variant-off:before{content:"\F033A"}.mdi-link-variant-plus:before{content:"\F1100"}.mdi-link-variant-remove:before{content:"\F1101"}.mdi-linkedin:before{content:"\F033B"}.mdi-linux:before{content:"\F033D"}.mdi-linux-mint:before{content:"\F08ED"}.mdi-lipstick:before{content:"\F13B5"}.mdi-list-status:before{content:"\F15AB"}.mdi-litecoin:before{content:"\F0A61"}.mdi-loading:before{content:"\F0772"}.mdi-location-enter:before{content:"\F0FC4"}.mdi-location-exit:before{content:"\F0FC5"}.mdi-lock:before{content:"\F033E"}.mdi-lock-alert:before{content:"\F08EE"}.mdi-lock-alert-outline:before{content:"\F15D1"}.mdi-lock-check:before{content:"\F139A"}.mdi-lock-check-outline:before{content:"\F16A8"}.mdi-lock-clock:before{content:"\F097F"}.mdi-lock-minus:before{content:"\F16A9"}.mdi-lock-minus-outline:before{content:"\F16AA"}.mdi-lock-off:before{content:"\F1671"}.mdi-lock-off-outline:before{content:"\F1672"}.mdi-lock-open:before{content:"\F033F"}.mdi-lock-open-alert:before{content:"\F139B"}.mdi-lock-open-alert-outline:before{content:"\F15D2"}.mdi-lock-open-check:before{content:"\F139C"}.mdi-lock-open-check-outline:before{content:"\F16AB"}.mdi-lock-open-minus:before{content:"\F16AC"}.mdi-lock-open-minus-outline:before{content:"\F16AD"}.mdi-lock-open-outline:before{content:"\F0340"}.mdi-lock-open-plus:before{content:"\F16AE"}.mdi-lock-open-plus-outline:before{content:"\F16AF"}.mdi-lock-open-remove:before{content:"\F16B0"}.mdi-lock-open-remove-outline:before{content:"\F16B1"}.mdi-lock-open-variant:before{content:"\F0FC6"}.mdi-lock-open-variant-outline:before{content:"\F0FC7"}.mdi-lock-outline:before{content:"\F0341"}.mdi-lock-pattern:before{content:"\F06EA"}.mdi-lock-plus:before{content:"\F05FB"}.mdi-lock-plus-outline:before{content:"\F16B2"}.mdi-lock-question:before{content:"\F08EF"}.mdi-lock-remove:before{content:"\F16B3"}.mdi-lock-remove-outline:before{content:"\F16B4"}.mdi-lock-reset:before{content:"\F0773"}.mdi-lock-smart:before{content:"\F08B2"}.mdi-locker:before{content:"\F07D7"}.mdi-locker-multiple:before{content:"\F07D8"}.mdi-login:before{content:"\F0342"}.mdi-login-variant:before{content:"\F05FC"}.mdi-logout:before{content:"\F0343"}.mdi-logout-variant:before{content:"\F05FD"}.mdi-longitude:before{content:"\F0F5A"}.mdi-looks:before{content:"\F0344"}.mdi-lotion:before{content:"\F1582"}.mdi-lotion-outline:before{content:"\F1583"}.mdi-lotion-plus:before{content:"\F1584"}.mdi-lotion-plus-outline:before{content:"\F1585"}.mdi-loupe:before{content:"\F0345"}.mdi-lumx:before{content:"\F0346"}.mdi-lungs:before{content:"\F1084"}.mdi-magnet:before{content:"\F0347"}.mdi-magnet-on:before{content:"\F0348"}.mdi-magnify:before{content:"\F0349"}.mdi-magnify-close:before{content:"\F0980"}.mdi-magnify-minus:before{content:"\F034A"}.mdi-magnify-minus-cursor:before{content:"\F0A62"}.mdi-magnify-minus-outline:before{content:"\F06EC"}.mdi-magnify-plus:before{content:"\F034B"}.mdi-magnify-plus-cursor:before{content:"\F0A63"}.mdi-magnify-plus-outline:before{content:"\F06ED"}.mdi-magnify-remove-cursor:before{content:"\F120C"}.mdi-magnify-remove-outline:before{content:"\F120D"}.mdi-magnify-scan:before{content:"\F1276"}.mdi-mail:before{content:"\F0EBB"}.mdi-mailbox:before{content:"\F06EE"}.mdi-mailbox-open:before{content:"\F0D88"}.mdi-mailbox-open-outline:before{content:"\F0D89"}.mdi-mailbox-open-up:before{content:"\F0D8A"}.mdi-mailbox-open-up-outline:before{content:"\F0D8B"}.mdi-mailbox-outline:before{content:"\F0D8C"}.mdi-mailbox-up:before{content:"\F0D8D"}.mdi-mailbox-up-outline:before{content:"\F0D8E"}.mdi-manjaro:before{content:"\F160A"}.mdi-map:before{content:"\F034D"}.mdi-map-check:before{content:"\F0EBC"}.mdi-map-check-outline:before{content:"\F0EBD"}.mdi-map-clock:before{content:"\F0D1E"}.mdi-map-clock-outline:before{content:"\F0D1F"}.mdi-map-legend:before{content:"\F0A01"}.mdi-map-marker:before{content:"\F034E"}.mdi-map-marker-alert:before{content:"\F0F05"}.mdi-map-marker-alert-outline:before{content:"\F0F06"}.mdi-map-marker-check:before{content:"\F0C95"}.mdi-map-marker-check-outline:before{content:"\F12FB"}.mdi-map-marker-circle:before{content:"\F034F"}.mdi-map-marker-distance:before{content:"\F08F0"}.mdi-map-marker-down:before{content:"\F1102"}.mdi-map-marker-left:before{content:"\F12DB"}.mdi-map-marker-left-outline:before{content:"\F12DD"}.mdi-map-marker-minus:before{content:"\F0650"}.mdi-map-marker-minus-outline:before{content:"\F12F9"}.mdi-map-marker-multiple:before{content:"\F0350"}.mdi-map-marker-multiple-outline:before{content:"\F1277"}.mdi-map-marker-off:before{content:"\F0351"}.mdi-map-marker-off-outline:before{content:"\F12FD"}.mdi-map-marker-outline:before{content:"\F07D9"}.mdi-map-marker-path:before{content:"\F0D20"}.mdi-map-marker-plus:before{content:"\F0651"}.mdi-map-marker-plus-outline:before{content:"\F12F8"}.mdi-map-marker-question:before{content:"\F0F07"}.mdi-map-marker-question-outline:before{content:"\F0F08"}.mdi-map-marker-radius:before{content:"\F0352"}.mdi-map-marker-radius-outline:before{content:"\F12FC"}.mdi-map-marker-remove:before{content:"\F0F09"}.mdi-map-marker-remove-outline:before{content:"\F12FA"}.mdi-map-marker-remove-variant:before{content:"\F0F0A"}.mdi-map-marker-right:before{content:"\F12DC"}.mdi-map-marker-right-outline:before{content:"\F12DE"}.mdi-map-marker-star:before{content:"\F1608"}.mdi-map-marker-star-outline:before{content:"\F1609"}.mdi-map-marker-up:before{content:"\F1103"}.mdi-map-minus:before{content:"\F0981"}.mdi-map-outline:before{content:"\F0982"}.mdi-map-plus:before{content:"\F0983"}.mdi-map-search:before{content:"\F0984"}.mdi-map-search-outline:before{content:"\F0985"}.mdi-mapbox:before{content:"\F0BAA"}.mdi-margin:before{content:"\F0353"}.mdi-marker:before{content:"\F0652"}.mdi-marker-cancel:before{content:"\F0DD9"}.mdi-marker-check:before{content:"\F0355"}.mdi-mastodon:before{content:"\F0AD1"}.mdi-material-design:before{content:"\F0986"}.mdi-material-ui:before{content:"\F0357"}.mdi-math-compass:before{content:"\F0358"}.mdi-math-cos:before{content:"\F0C96"}.mdi-math-integral:before{content:"\F0FC8"}.mdi-math-integral-box:before{content:"\F0FC9"}.mdi-math-log:before{content:"\F1085"}.mdi-math-norm:before{content:"\F0FCA"}.mdi-math-norm-box:before{content:"\F0FCB"}.mdi-math-sin:before{content:"\F0C97"}.mdi-math-tan:before{content:"\F0C98"}.mdi-matrix:before{content:"\F0628"}.mdi-medal:before{content:"\F0987"}.mdi-medal-outline:before{content:"\F1326"}.mdi-medical-bag:before{content:"\F06EF"}.mdi-meditation:before{content:"\F117B"}.mdi-memory:before{content:"\F035B"}.mdi-menu:before{content:"\F035C"}.mdi-menu-down:before{content:"\F035D"}.mdi-menu-down-outline:before{content:"\F06B6"}.mdi-menu-left:before{content:"\F035E"}.mdi-menu-left-outline:before{content:"\F0A02"}.mdi-menu-open:before{content:"\F0BAB"}.mdi-menu-right:before{content:"\F035F"}.mdi-menu-right-outline:before{content:"\F0A03"}.mdi-menu-swap:before{content:"\F0A64"}.mdi-menu-swap-outline:before{content:"\F0A65"}.mdi-menu-up:before{content:"\F0360"}.mdi-menu-up-outline:before{content:"\F06B7"}.mdi-merge:before{content:"\F0F5C"}.mdi-message:before{content:"\F0361"}.mdi-message-alert:before{content:"\F0362"}.mdi-message-alert-outline:before{content:"\F0A04"}.mdi-message-arrow-left:before{content:"\F12F2"}.mdi-message-arrow-left-outline:before{content:"\F12F3"}.mdi-message-arrow-right:before{content:"\F12F4"}.mdi-message-arrow-right-outline:before{content:"\F12F5"}.mdi-message-bookmark:before{content:"\F15AC"}.mdi-message-bookmark-outline:before{content:"\F15AD"}.mdi-message-bulleted:before{content:"\F06A2"}.mdi-message-bulleted-off:before{content:"\F06A3"}.mdi-message-cog:before{content:"\F06F1"}.mdi-message-cog-outline:before{content:"\F1172"}.mdi-message-draw:before{content:"\F0363"}.mdi-message-flash:before{content:"\F15A9"}.mdi-message-flash-outline:before{content:"\F15AA"}.mdi-message-image:before{content:"\F0364"}.mdi-message-image-outline:before{content:"\F116C"}.mdi-message-lock:before{content:"\F0FCC"}.mdi-message-lock-outline:before{content:"\F116D"}.mdi-message-minus:before{content:"\F116E"}.mdi-message-minus-outline:before{content:"\F116F"}.mdi-message-off:before{content:"\F164D"}.mdi-message-off-outline:before{content:"\F164E"}.mdi-message-outline:before{content:"\F0365"}.mdi-message-plus:before{content:"\F0653"}.mdi-message-plus-outline:before{content:"\F10BB"}.mdi-message-processing:before{content:"\F0366"}.mdi-message-processing-outline:before{content:"\F1170"}.mdi-message-question:before{content:"\F173A"}.mdi-message-question-outline:before{content:"\F173B"}.mdi-message-reply:before{content:"\F0367"}.mdi-message-reply-outline:before{content:"\F173D"}.mdi-message-reply-text:before{content:"\F0368"}.mdi-message-reply-text-outline:before{content:"\F173E"}.mdi-message-settings:before{content:"\F06F0"}.mdi-message-settings-outline:before{content:"\F1171"}.mdi-message-text:before{content:"\F0369"}.mdi-message-text-clock:before{content:"\F1173"}.mdi-message-text-clock-outline:before{content:"\F1174"}.mdi-message-text-lock:before{content:"\F0FCD"}.mdi-message-text-lock-outline:before{content:"\F1175"}.mdi-message-text-outline:before{content:"\F036A"}.mdi-message-video:before{content:"\F036B"}.mdi-meteor:before{content:"\F0629"}.mdi-metronome:before{content:"\F07DA"}.mdi-metronome-tick:before{content:"\F07DB"}.mdi-micro-sd:before{content:"\F07DC"}.mdi-microphone:before{content:"\F036C"}.mdi-microphone-minus:before{content:"\F08B3"}.mdi-microphone-off:before{content:"\F036D"}.mdi-microphone-outline:before{content:"\F036E"}.mdi-microphone-plus:before{content:"\F08B4"}.mdi-microphone-settings:before{content:"\F036F"}.mdi-microphone-variant:before{content:"\F0370"}.mdi-microphone-variant-off:before{content:"\F0371"}.mdi-microscope:before{content:"\F0654"}.mdi-microsoft:before{content:"\F0372"}.mdi-microsoft-access:before{content:"\F138E"}.mdi-microsoft-azure:before{content:"\F0805"}.mdi-microsoft-azure-devops:before{content:"\F0FD5"}.mdi-microsoft-bing:before{content:"\F00A4"}.mdi-microsoft-dynamics-365:before{content:"\F0988"}.mdi-microsoft-edge:before{content:"\F01E9"}.mdi-microsoft-edge-legacy:before{content:"\F1250"}.mdi-microsoft-excel:before{content:"\F138F"}.mdi-microsoft-internet-explorer:before{content:"\F0300"}.mdi-microsoft-office:before{content:"\F03C6"}.mdi-microsoft-onedrive:before{content:"\F03CA"}.mdi-microsoft-onenote:before{content:"\F0747"}.mdi-microsoft-outlook:before{content:"\F0D22"}.mdi-microsoft-powerpoint:before{content:"\F1390"}.mdi-microsoft-sharepoint:before{content:"\F1391"}.mdi-microsoft-teams:before{content:"\F02BB"}.mdi-microsoft-visual-studio:before{content:"\F0610"}.mdi-microsoft-visual-studio-code:before{content:"\F0A1E"}.mdi-microsoft-windows:before{content:"\F05B3"}.mdi-microsoft-windows-classic:before{content:"\F0A21"}.mdi-microsoft-word:before{content:"\F1392"}.mdi-microsoft-xbox:before{content:"\F05B9"}.mdi-microsoft-xbox-controller:before{content:"\F05BA"}.mdi-microsoft-xbox-controller-battery-alert:before{content:"\F074B"}.mdi-microsoft-xbox-controller-battery-charging:before{content:"\F0A22"}.mdi-microsoft-xbox-controller-battery-empty:before{content:"\F074C"}.mdi-microsoft-xbox-controller-battery-full:before{content:"\F074D"}.mdi-microsoft-xbox-controller-battery-low:before{content:"\F074E"}.mdi-microsoft-xbox-controller-battery-medium:before{content:"\F074F"}.mdi-microsoft-xbox-controller-battery-unknown:before{content:"\F0750"}.mdi-microsoft-xbox-controller-menu:before{content:"\F0E6F"}.mdi-microsoft-xbox-controller-off:before{content:"\F05BB"}.mdi-microsoft-xbox-controller-view:before{content:"\F0E70"}.mdi-microsoft-yammer:before{content:"\F0789"}.mdi-microwave:before{content:"\F0C99"}.mdi-microwave-off:before{content:"\F1423"}.mdi-middleware:before{content:"\F0F5D"}.mdi-middleware-outline:before{content:"\F0F5E"}.mdi-midi:before{content:"\F08F1"}.mdi-midi-port:before{content:"\F08F2"}.mdi-mine:before{content:"\F0DDA"}.mdi-minecraft:before{content:"\F0373"}.mdi-mini-sd:before{content:"\F0A05"}.mdi-minidisc:before{content:"\F0A06"}.mdi-minus:before{content:"\F0374"}.mdi-minus-box:before{content:"\F0375"}.mdi-minus-box-multiple:before{content:"\F1141"}.mdi-minus-box-multiple-outline:before{content:"\F1142"}.mdi-minus-box-outline:before{content:"\F06F2"}.mdi-minus-circle:before{content:"\F0376"}.mdi-minus-circle-multiple:before{content:"\F035A"}.mdi-minus-circle-multiple-outline:before{content:"\F0AD3"}.mdi-minus-circle-off:before{content:"\F1459"}.mdi-minus-circle-off-outline:before{content:"\F145A"}.mdi-minus-circle-outline:before{content:"\F0377"}.mdi-minus-network:before{content:"\F0378"}.mdi-minus-network-outline:before{content:"\F0C9A"}.mdi-minus-thick:before{content:"\F1639"}.mdi-mirror:before{content:"\F11FD"}.mdi-mixed-martial-arts:before{content:"\F0D8F"}.mdi-mixed-reality:before{content:"\F087F"}.mdi-molecule:before{content:"\F0BAC"}.mdi-molecule-co:before{content:"\F12FE"}.mdi-molecule-co2:before{content:"\F07E4"}.mdi-monitor:before{content:"\F0379"}.mdi-monitor-cellphone:before{content:"\F0989"}.mdi-monitor-cellphone-star:before{content:"\F098A"}.mdi-monitor-clean:before{content:"\F1104"}.mdi-monitor-dashboard:before{content:"\F0A07"}.mdi-monitor-edit:before{content:"\F12C6"}.mdi-monitor-eye:before{content:"\F13B4"}.mdi-monitor-lock:before{content:"\F0DDB"}.mdi-monitor-multiple:before{content:"\F037A"}.mdi-monitor-off:before{content:"\F0D90"}.mdi-monitor-screenshot:before{content:"\F0E51"}.mdi-monitor-share:before{content:"\F1483"}.mdi-monitor-speaker:before{content:"\F0F5F"}.mdi-monitor-speaker-off:before{content:"\F0F60"}.mdi-monitor-star:before{content:"\F0DDC"}.mdi-moon-first-quarter:before{content:"\F0F61"}.mdi-moon-full:before{content:"\F0F62"}.mdi-moon-last-quarter:before{content:"\F0F63"}.mdi-moon-new:before{content:"\F0F64"}.mdi-moon-waning-crescent:before{content:"\F0F65"}.mdi-moon-waning-gibbous:before{content:"\F0F66"}.mdi-moon-waxing-crescent:before{content:"\F0F67"}.mdi-moon-waxing-gibbous:before{content:"\F0F68"}.mdi-moped:before{content:"\F1086"}.mdi-moped-electric:before{content:"\F15B7"}.mdi-moped-electric-outline:before{content:"\F15B8"}.mdi-moped-outline:before{content:"\F15B9"}.mdi-more:before{content:"\F037B"}.mdi-mother-heart:before{content:"\F1314"}.mdi-mother-nurse:before{content:"\F0D21"}.mdi-motion:before{content:"\F15B2"}.mdi-motion-outline:before{content:"\F15B3"}.mdi-motion-pause:before{content:"\F1590"}.mdi-motion-pause-outline:before{content:"\F1592"}.mdi-motion-play:before{content:"\F158F"}.mdi-motion-play-outline:before{content:"\F1591"}.mdi-motion-sensor:before{content:"\F0D91"}.mdi-motion-sensor-off:before{content:"\F1435"}.mdi-motorbike:before{content:"\F037C"}.mdi-motorbike-electric:before{content:"\F15BA"}.mdi-mouse:before{content:"\F037D"}.mdi-mouse-bluetooth:before{content:"\F098B"}.mdi-mouse-move-down:before{content:"\F1550"}.mdi-mouse-move-up:before{content:"\F1551"}.mdi-mouse-move-vertical:before{content:"\F1552"}.mdi-mouse-off:before{content:"\F037E"}.mdi-mouse-variant:before{content:"\F037F"}.mdi-mouse-variant-off:before{content:"\F0380"}.mdi-move-resize:before{content:"\F0655"}.mdi-move-resize-variant:before{content:"\F0656"}.mdi-movie:before{content:"\F0381"}.mdi-movie-check:before{content:"\F16F3"}.mdi-movie-check-outline:before{content:"\F16F4"}.mdi-movie-cog:before{content:"\F16F5"}.mdi-movie-cog-outline:before{content:"\F16F6"}.mdi-movie-edit:before{content:"\F1122"}.mdi-movie-edit-outline:before{content:"\F1123"}.mdi-movie-filter:before{content:"\F1124"}.mdi-movie-filter-outline:before{content:"\F1125"}.mdi-movie-minus:before{content:"\F16F7"}.mdi-movie-minus-outline:before{content:"\F16F8"}.mdi-movie-off:before{content:"\F16F9"}.mdi-movie-off-outline:before{content:"\F16FA"}.mdi-movie-open:before{content:"\F0FCE"}.mdi-movie-open-check:before{content:"\F16FB"}.mdi-movie-open-check-outline:before{content:"\F16FC"}.mdi-movie-open-cog:before{content:"\F16FD"}.mdi-movie-open-cog-outline:before{content:"\F16FE"}.mdi-movie-open-edit:before{content:"\F16FF"}.mdi-movie-open-edit-outline:before{content:"\F1700"}.mdi-movie-open-minus:before{content:"\F1701"}.mdi-movie-open-minus-outline:before{content:"\F1702"}.mdi-movie-open-off:before{content:"\F1703"}.mdi-movie-open-off-outline:before{content:"\F1704"}.mdi-movie-open-outline:before{content:"\F0FCF"}.mdi-movie-open-play:before{content:"\F1705"}.mdi-movie-open-play-outline:before{content:"\F1706"}.mdi-movie-open-plus:before{content:"\F1707"}.mdi-movie-open-plus-outline:before{content:"\F1708"}.mdi-movie-open-remove:before{content:"\F1709"}.mdi-movie-open-remove-outline:before{content:"\F170A"}.mdi-movie-open-settings:before{content:"\F170B"}.mdi-movie-open-settings-outline:before{content:"\F170C"}.mdi-movie-open-star:before{content:"\F170D"}.mdi-movie-open-star-outline:before{content:"\F170E"}.mdi-movie-outline:before{content:"\F0DDD"}.mdi-movie-play:before{content:"\F170F"}.mdi-movie-play-outline:before{content:"\F1710"}.mdi-movie-plus:before{content:"\F1711"}.mdi-movie-plus-outline:before{content:"\F1712"}.mdi-movie-remove:before{content:"\F1713"}.mdi-movie-remove-outline:before{content:"\F1714"}.mdi-movie-roll:before{content:"\F07DE"}.mdi-movie-search:before{content:"\F11D2"}.mdi-movie-search-outline:before{content:"\F11D3"}.mdi-movie-settings:before{content:"\F1715"}.mdi-movie-settings-outline:before{content:"\F1716"}.mdi-movie-star:before{content:"\F1717"}.mdi-movie-star-outline:before{content:"\F1718"}.mdi-mower:before{content:"\F166F"}.mdi-mower-bag:before{content:"\F1670"}.mdi-muffin:before{content:"\F098C"}.mdi-multiplication:before{content:"\F0382"}.mdi-multiplication-box:before{content:"\F0383"}.mdi-mushroom:before{content:"\F07DF"}.mdi-mushroom-off:before{content:"\F13FA"}.mdi-mushroom-off-outline:before{content:"\F13FB"}.mdi-mushroom-outline:before{content:"\F07E0"}.mdi-music:before{content:"\F075A"}.mdi-music-accidental-double-flat:before{content:"\F0F69"}.mdi-music-accidental-double-sharp:before{content:"\F0F6A"}.mdi-music-accidental-flat:before{content:"\F0F6B"}.mdi-music-accidental-natural:before{content:"\F0F6C"}.mdi-music-accidental-sharp:before{content:"\F0F6D"}.mdi-music-box:before{content:"\F0384"}.mdi-music-box-multiple:before{content:"\F0333"}.mdi-music-box-multiple-outline:before{content:"\F0F04"}.mdi-music-box-outline:before{content:"\F0385"}.mdi-music-circle:before{content:"\F0386"}.mdi-music-circle-outline:before{content:"\F0AD4"}.mdi-music-clef-alto:before{content:"\F0F6E"}.mdi-music-clef-bass:before{content:"\F0F6F"}.mdi-music-clef-treble:before{content:"\F0F70"}.mdi-music-note:before{content:"\F0387"}.mdi-music-note-bluetooth:before{content:"\F05FE"}.mdi-music-note-bluetooth-off:before{content:"\F05FF"}.mdi-music-note-eighth:before{content:"\F0388"}.mdi-music-note-eighth-dotted:before{content:"\F0F71"}.mdi-music-note-half:before{content:"\F0389"}.mdi-music-note-half-dotted:before{content:"\F0F72"}.mdi-music-note-off:before{content:"\F038A"}.mdi-music-note-off-outline:before{content:"\F0F73"}.mdi-music-note-outline:before{content:"\F0F74"}.mdi-music-note-plus:before{content:"\F0DDE"}.mdi-music-note-quarter:before{content:"\F038B"}.mdi-music-note-quarter-dotted:before{content:"\F0F75"}.mdi-music-note-sixteenth:before{content:"\F038C"}.mdi-music-note-sixteenth-dotted:before{content:"\F0F76"}.mdi-music-note-whole:before{content:"\F038D"}.mdi-music-note-whole-dotted:before{content:"\F0F77"}.mdi-music-off:before{content:"\F075B"}.mdi-music-rest-eighth:before{content:"\F0F78"}.mdi-music-rest-half:before{content:"\F0F79"}.mdi-music-rest-quarter:before{content:"\F0F7A"}.mdi-music-rest-sixteenth:before{content:"\F0F7B"}.mdi-music-rest-whole:before{content:"\F0F7C"}.mdi-mustache:before{content:"\F15DE"}.mdi-nail:before{content:"\F0DDF"}.mdi-nas:before{content:"\F08F3"}.mdi-nativescript:before{content:"\F0880"}.mdi-nature:before{content:"\F038E"}.mdi-nature-people:before{content:"\F038F"}.mdi-navigation:before{content:"\F0390"}.mdi-navigation-outline:before{content:"\F1607"}.mdi-near-me:before{content:"\F05CD"}.mdi-necklace:before{content:"\F0F0B"}.mdi-needle:before{content:"\F0391"}.mdi-netflix:before{content:"\F0746"}.mdi-network:before{content:"\F06F3"}.mdi-network-off:before{content:"\F0C9B"}.mdi-network-off-outline:before{content:"\F0C9C"}.mdi-network-outline:before{content:"\F0C9D"}.mdi-network-strength-1:before{content:"\F08F4"}.mdi-network-strength-1-alert:before{content:"\F08F5"}.mdi-network-strength-2:before{content:"\F08F6"}.mdi-network-strength-2-alert:before{content:"\F08F7"}.mdi-network-strength-3:before{content:"\F08F8"}.mdi-network-strength-3-alert:before{content:"\F08F9"}.mdi-network-strength-4:before{content:"\F08FA"}.mdi-network-strength-4-alert:before{content:"\F08FB"}.mdi-network-strength-off:before{content:"\F08FC"}.mdi-network-strength-off-outline:before{content:"\F08FD"}.mdi-network-strength-outline:before{content:"\F08FE"}.mdi-new-box:before{content:"\F0394"}.mdi-newspaper:before{content:"\F0395"}.mdi-newspaper-minus:before{content:"\F0F0C"}.mdi-newspaper-plus:before{content:"\F0F0D"}.mdi-newspaper-variant:before{content:"\F1001"}.mdi-newspaper-variant-multiple:before{content:"\F1002"}.mdi-newspaper-variant-multiple-outline:before{content:"\F1003"}.mdi-newspaper-variant-outline:before{content:"\F1004"}.mdi-nfc:before{content:"\F0396"}.mdi-nfc-search-variant:before{content:"\F0E53"}.mdi-nfc-tap:before{content:"\F0397"}.mdi-nfc-variant:before{content:"\F0398"}.mdi-nfc-variant-off:before{content:"\F0E54"}.mdi-ninja:before{content:"\F0774"}.mdi-nintendo-game-boy:before{content:"\F1393"}.mdi-nintendo-switch:before{content:"\F07E1"}.mdi-nintendo-wii:before{content:"\F05AB"}.mdi-nintendo-wiiu:before{content:"\F072D"}.mdi-nix:before{content:"\F1105"}.mdi-nodejs:before{content:"\F0399"}.mdi-noodles:before{content:"\F117E"}.mdi-not-equal:before{content:"\F098D"}.mdi-not-equal-variant:before{content:"\F098E"}.mdi-note:before{content:"\F039A"}.mdi-note-minus:before{content:"\F164F"}.mdi-note-minus-outline:before{content:"\F1650"}.mdi-note-multiple:before{content:"\F06B8"}.mdi-note-multiple-outline:before{content:"\F06B9"}.mdi-note-outline:before{content:"\F039B"}.mdi-note-plus:before{content:"\F039C"}.mdi-note-plus-outline:before{content:"\F039D"}.mdi-note-remove:before{content:"\F1651"}.mdi-note-remove-outline:before{content:"\F1652"}.mdi-note-search:before{content:"\F1653"}.mdi-note-search-outline:before{content:"\F1654"}.mdi-note-text:before{content:"\F039E"}.mdi-note-text-outline:before{content:"\F11D7"}.mdi-notebook:before{content:"\F082E"}.mdi-notebook-check:before{content:"\F14F5"}.mdi-notebook-check-outline:before{content:"\F14F6"}.mdi-notebook-edit:before{content:"\F14E7"}.mdi-notebook-edit-outline:before{content:"\F14E9"}.mdi-notebook-minus:before{content:"\F1610"}.mdi-notebook-minus-outline:before{content:"\F1611"}.mdi-notebook-multiple:before{content:"\F0E55"}.mdi-notebook-outline:before{content:"\F0EBF"}.mdi-notebook-plus:before{content:"\F1612"}.mdi-notebook-plus-outline:before{content:"\F1613"}.mdi-notebook-remove:before{content:"\F1614"}.mdi-notebook-remove-outline:before{content:"\F1615"}.mdi-notification-clear-all:before{content:"\F039F"}.mdi-npm:before{content:"\F06F7"}.mdi-nuke:before{content:"\F06A4"}.mdi-null:before{content:"\F07E2"}.mdi-numeric:before{content:"\F03A0"}.mdi-numeric-0:before{content:"\F0B39"}.mdi-numeric-0-box:before{content:"\F03A1"}.mdi-numeric-0-box-multiple:before{content:"\F0F0E"}.mdi-numeric-0-box-multiple-outline:before{content:"\F03A2"}.mdi-numeric-0-box-outline:before{content:"\F03A3"}.mdi-numeric-0-circle:before{content:"\F0C9E"}.mdi-numeric-0-circle-outline:before{content:"\F0C9F"}.mdi-numeric-1:before{content:"\F0B3A"}.mdi-numeric-1-box:before{content:"\F03A4"}.mdi-numeric-1-box-multiple:before{content:"\F0F0F"}.mdi-numeric-1-box-multiple-outline:before{content:"\F03A5"}.mdi-numeric-1-box-outline:before{content:"\F03A6"}.mdi-numeric-1-circle:before{content:"\F0CA0"}.mdi-numeric-1-circle-outline:before{content:"\F0CA1"}.mdi-numeric-10:before{content:"\F0FE9"}.mdi-numeric-10-box:before{content:"\F0F7D"}.mdi-numeric-10-box-multiple:before{content:"\F0FEA"}.mdi-numeric-10-box-multiple-outline:before{content:"\F0FEB"}.mdi-numeric-10-box-outline:before{content:"\F0F7E"}.mdi-numeric-10-circle:before{content:"\F0FEC"}.mdi-numeric-10-circle-outline:before{content:"\F0FED"}.mdi-numeric-2:before{content:"\F0B3B"}.mdi-numeric-2-box:before{content:"\F03A7"}.mdi-numeric-2-box-multiple:before{content:"\F0F10"}.mdi-numeric-2-box-multiple-outline:before{content:"\F03A8"}.mdi-numeric-2-box-outline:before{content:"\F03A9"}.mdi-numeric-2-circle:before{content:"\F0CA2"}.mdi-numeric-2-circle-outline:before{content:"\F0CA3"}.mdi-numeric-3:before{content:"\F0B3C"}.mdi-numeric-3-box:before{content:"\F03AA"}.mdi-numeric-3-box-multiple:before{content:"\F0F11"}.mdi-numeric-3-box-multiple-outline:before{content:"\F03AB"}.mdi-numeric-3-box-outline:before{content:"\F03AC"}.mdi-numeric-3-circle:before{content:"\F0CA4"}.mdi-numeric-3-circle-outline:before{content:"\F0CA5"}.mdi-numeric-4:before{content:"\F0B3D"}.mdi-numeric-4-box:before{content:"\F03AD"}.mdi-numeric-4-box-multiple:before{content:"\F0F12"}.mdi-numeric-4-box-multiple-outline:before{content:"\F03B2"}.mdi-numeric-4-box-outline:before{content:"\F03AE"}.mdi-numeric-4-circle:before{content:"\F0CA6"}.mdi-numeric-4-circle-outline:before{content:"\F0CA7"}.mdi-numeric-5:before{content:"\F0B3E"}.mdi-numeric-5-box:before{content:"\F03B1"}.mdi-numeric-5-box-multiple:before{content:"\F0F13"}.mdi-numeric-5-box-multiple-outline:before{content:"\F03AF"}.mdi-numeric-5-box-outline:before{content:"\F03B0"}.mdi-numeric-5-circle:before{content:"\F0CA8"}.mdi-numeric-5-circle-outline:before{content:"\F0CA9"}.mdi-numeric-6:before{content:"\F0B3F"}.mdi-numeric-6-box:before{content:"\F03B3"}.mdi-numeric-6-box-multiple:before{content:"\F0F14"}.mdi-numeric-6-box-multiple-outline:before{content:"\F03B4"}.mdi-numeric-6-box-outline:before{content:"\F03B5"}.mdi-numeric-6-circle:before{content:"\F0CAA"}.mdi-numeric-6-circle-outline:before{content:"\F0CAB"}.mdi-numeric-7:before{content:"\F0B40"}.mdi-numeric-7-box:before{content:"\F03B6"}.mdi-numeric-7-box-multiple:before{content:"\F0F15"}.mdi-numeric-7-box-multiple-outline:before{content:"\F03B7"}.mdi-numeric-7-box-outline:before{content:"\F03B8"}.mdi-numeric-7-circle:before{content:"\F0CAC"}.mdi-numeric-7-circle-outline:before{content:"\F0CAD"}.mdi-numeric-8:before{content:"\F0B41"}.mdi-numeric-8-box:before{content:"\F03B9"}.mdi-numeric-8-box-multiple:before{content:"\F0F16"}.mdi-numeric-8-box-multiple-outline:before{content:"\F03BA"}.mdi-numeric-8-box-outline:before{content:"\F03BB"}.mdi-numeric-8-circle:before{content:"\F0CAE"}.mdi-numeric-8-circle-outline:before{content:"\F0CAF"}.mdi-numeric-9:before{content:"\F0B42"}.mdi-numeric-9-box:before{content:"\F03BC"}.mdi-numeric-9-box-multiple:before{content:"\F0F17"}.mdi-numeric-9-box-multiple-outline:before{content:"\F03BD"}.mdi-numeric-9-box-outline:before{content:"\F03BE"}.mdi-numeric-9-circle:before{content:"\F0CB0"}.mdi-numeric-9-circle-outline:before{content:"\F0CB1"}.mdi-numeric-9-plus:before{content:"\F0FEE"}.mdi-numeric-9-plus-box:before{content:"\F03BF"}.mdi-numeric-9-plus-box-multiple:before{content:"\F0F18"}.mdi-numeric-9-plus-box-multiple-outline:before{content:"\F03C0"}.mdi-numeric-9-plus-box-outline:before{content:"\F03C1"}.mdi-numeric-9-plus-circle:before{content:"\F0CB2"}.mdi-numeric-9-plus-circle-outline:before{content:"\F0CB3"}.mdi-numeric-negative-1:before{content:"\F1052"}.mdi-numeric-positive-1:before{content:"\F15CB"}.mdi-nut:before{content:"\F06F8"}.mdi-nutrition:before{content:"\F03C2"}.mdi-nuxt:before{content:"\F1106"}.mdi-oar:before{content:"\F067C"}.mdi-ocarina:before{content:"\F0DE0"}.mdi-oci:before{content:"\F12E9"}.mdi-ocr:before{content:"\F113A"}.mdi-octagon:before{content:"\F03C3"}.mdi-octagon-outline:before{content:"\F03C4"}.mdi-octagram:before{content:"\F06F9"}.mdi-octagram-outline:before{content:"\F0775"}.mdi-odnoklassniki:before{content:"\F03C5"}.mdi-offer:before{content:"\F121B"}.mdi-office-building:before{content:"\F0991"}.mdi-office-building-marker:before{content:"\F1520"}.mdi-office-building-marker-outline:before{content:"\F1521"}.mdi-office-building-outline:before{content:"\F151F"}.mdi-oil:before{content:"\F03C7"}.mdi-oil-lamp:before{content:"\F0F19"}.mdi-oil-level:before{content:"\F1053"}.mdi-oil-temperature:before{content:"\F0FF8"}.mdi-omega:before{content:"\F03C9"}.mdi-one-up:before{content:"\F0BAD"}.mdi-onepassword:before{content:"\F0881"}.mdi-opacity:before{content:"\F05CC"}.mdi-open-in-app:before{content:"\F03CB"}.mdi-open-in-new:before{content:"\F03CC"}.mdi-open-source-initiative:before{content:"\F0BAE"}.mdi-openid:before{content:"\F03CD"}.mdi-opera:before{content:"\F03CE"}.mdi-orbit:before{content:"\F0018"}.mdi-orbit-variant:before{content:"\F15DB"}.mdi-order-alphabetical-ascending:before{content:"\F020D"}.mdi-order-alphabetical-descending:before{content:"\F0D07"}.mdi-order-bool-ascending:before{content:"\F02BE"}.mdi-order-bool-ascending-variant:before{content:"\F098F"}.mdi-order-bool-descending:before{content:"\F1384"}.mdi-order-bool-descending-variant:before{content:"\F0990"}.mdi-order-numeric-ascending:before{content:"\F0545"}.mdi-order-numeric-descending:before{content:"\F0546"}.mdi-origin:before{content:"\F0B43"}.mdi-ornament:before{content:"\F03CF"}.mdi-ornament-variant:before{content:"\F03D0"}.mdi-outdoor-lamp:before{content:"\F1054"}.mdi-overscan:before{content:"\F1005"}.mdi-owl:before{content:"\F03D2"}.mdi-pac-man:before{content:"\F0BAF"}.mdi-package:before{content:"\F03D3"}.mdi-package-down:before{content:"\F03D4"}.mdi-package-up:before{content:"\F03D5"}.mdi-package-variant:before{content:"\F03D6"}.mdi-package-variant-closed:before{content:"\F03D7"}.mdi-page-first:before{content:"\F0600"}.mdi-page-last:before{content:"\F0601"}.mdi-page-layout-body:before{content:"\F06FA"}.mdi-page-layout-footer:before{content:"\F06FB"}.mdi-page-layout-header:before{content:"\F06FC"}.mdi-page-layout-header-footer:before{content:"\F0F7F"}.mdi-page-layout-sidebar-left:before{content:"\F06FD"}.mdi-page-layout-sidebar-right:before{content:"\F06FE"}.mdi-page-next:before{content:"\F0BB0"}.mdi-page-next-outline:before{content:"\F0BB1"}.mdi-page-previous:before{content:"\F0BB2"}.mdi-page-previous-outline:before{content:"\F0BB3"}.mdi-pail:before{content:"\F1417"}.mdi-pail-minus:before{content:"\F1437"}.mdi-pail-minus-outline:before{content:"\F143C"}.mdi-pail-off:before{content:"\F1439"}.mdi-pail-off-outline:before{content:"\F143E"}.mdi-pail-outline:before{content:"\F143A"}.mdi-pail-plus:before{content:"\F1436"}.mdi-pail-plus-outline:before{content:"\F143B"}.mdi-pail-remove:before{content:"\F1438"}.mdi-pail-remove-outline:before{content:"\F143D"}.mdi-palette:before{content:"\F03D8"}.mdi-palette-advanced:before{content:"\F03D9"}.mdi-palette-outline:before{content:"\F0E0C"}.mdi-palette-swatch:before{content:"\F08B5"}.mdi-palette-swatch-outline:before{content:"\F135C"}.mdi-palm-tree:before{content:"\F1055"}.mdi-pan:before{content:"\F0BB4"}.mdi-pan-bottom-left:before{content:"\F0BB5"}.mdi-pan-bottom-right:before{content:"\F0BB6"}.mdi-pan-down:before{content:"\F0BB7"}.mdi-pan-horizontal:before{content:"\F0BB8"}.mdi-pan-left:before{content:"\F0BB9"}.mdi-pan-right:before{content:"\F0BBA"}.mdi-pan-top-left:before{content:"\F0BBB"}.mdi-pan-top-right:before{content:"\F0BBC"}.mdi-pan-up:before{content:"\F0BBD"}.mdi-pan-vertical:before{content:"\F0BBE"}.mdi-panda:before{content:"\F03DA"}.mdi-pandora:before{content:"\F03DB"}.mdi-panorama:before{content:"\F03DC"}.mdi-panorama-fisheye:before{content:"\F03DD"}.mdi-panorama-horizontal:before{content:"\F03DE"}.mdi-panorama-vertical:before{content:"\F03DF"}.mdi-panorama-wide-angle:before{content:"\F03E0"}.mdi-paper-cut-vertical:before{content:"\F03E1"}.mdi-paper-roll:before{content:"\F1157"}.mdi-paper-roll-outline:before{content:"\F1158"}.mdi-paperclip:before{content:"\F03E2"}.mdi-parachute:before{content:"\F0CB4"}.mdi-parachute-outline:before{content:"\F0CB5"}.mdi-parking:before{content:"\F03E3"}.mdi-party-popper:before{content:"\F1056"}.mdi-passport:before{content:"\F07E3"}.mdi-passport-biometric:before{content:"\F0DE1"}.mdi-pasta:before{content:"\F1160"}.mdi-patio-heater:before{content:"\F0F80"}.mdi-patreon:before{content:"\F0882"}.mdi-pause:before{content:"\F03E4"}.mdi-pause-circle:before{content:"\F03E5"}.mdi-pause-circle-outline:before{content:"\F03E6"}.mdi-pause-octagon:before{content:"\F03E7"}.mdi-pause-octagon-outline:before{content:"\F03E8"}.mdi-paw:before{content:"\F03E9"}.mdi-paw-off:before{content:"\F0657"}.mdi-paw-off-outline:before{content:"\F1676"}.mdi-paw-outline:before{content:"\F1675"}.mdi-pdf-box:before{content:"\F0E56"}.mdi-peace:before{content:"\F0884"}.mdi-peanut:before{content:"\F0FFC"}.mdi-peanut-off:before{content:"\F0FFD"}.mdi-peanut-off-outline:before{content:"\F0FFF"}.mdi-peanut-outline:before{content:"\F0FFE"}.mdi-pen:before{content:"\F03EA"}.mdi-pen-lock:before{content:"\F0DE2"}.mdi-pen-minus:before{content:"\F0DE3"}.mdi-pen-off:before{content:"\F0DE4"}.mdi-pen-plus:before{content:"\F0DE5"}.mdi-pen-remove:before{content:"\F0DE6"}.mdi-pencil:before{content:"\F03EB"}.mdi-pencil-box:before{content:"\F03EC"}.mdi-pencil-box-multiple:before{content:"\F1144"}.mdi-pencil-box-multiple-outline:before{content:"\F1145"}.mdi-pencil-box-outline:before{content:"\F03ED"}.mdi-pencil-circle:before{content:"\F06FF"}.mdi-pencil-circle-outline:before{content:"\F0776"}.mdi-pencil-lock:before{content:"\F03EE"}.mdi-pencil-lock-outline:before{content:"\F0DE7"}.mdi-pencil-minus:before{content:"\F0DE8"}.mdi-pencil-minus-outline:before{content:"\F0DE9"}.mdi-pencil-off:before{content:"\F03EF"}.mdi-pencil-off-outline:before{content:"\F0DEA"}.mdi-pencil-outline:before{content:"\F0CB6"}.mdi-pencil-plus:before{content:"\F0DEB"}.mdi-pencil-plus-outline:before{content:"\F0DEC"}.mdi-pencil-remove:before{content:"\F0DED"}.mdi-pencil-remove-outline:before{content:"\F0DEE"}.mdi-pencil-ruler:before{content:"\F1353"}.mdi-penguin:before{content:"\F0EC0"}.mdi-pentagon:before{content:"\F0701"}.mdi-pentagon-outline:before{content:"\F0700"}.mdi-pentagram:before{content:"\F1667"}.mdi-percent:before{content:"\F03F0"}.mdi-percent-outline:before{content:"\F1278"}.mdi-periodic-table:before{content:"\F08B6"}.mdi-perspective-less:before{content:"\F0D23"}.mdi-perspective-more:before{content:"\F0D24"}.mdi-pharmacy:before{content:"\F03F1"}.mdi-phone:before{content:"\F03F2"}.mdi-phone-alert:before{content:"\F0F1A"}.mdi-phone-alert-outline:before{content:"\F118E"}.mdi-phone-bluetooth:before{content:"\F03F3"}.mdi-phone-bluetooth-outline:before{content:"\F118F"}.mdi-phone-cancel:before{content:"\F10BC"}.mdi-phone-cancel-outline:before{content:"\F1190"}.mdi-phone-check:before{content:"\F11A9"}.mdi-phone-check-outline:before{content:"\F11AA"}.mdi-phone-classic:before{content:"\F0602"}.mdi-phone-classic-off:before{content:"\F1279"}.mdi-phone-dial:before{content:"\F1559"}.mdi-phone-dial-outline:before{content:"\F155A"}.mdi-phone-forward:before{content:"\F03F4"}.mdi-phone-forward-outline:before{content:"\F1191"}.mdi-phone-hangup:before{content:"\F03F5"}.mdi-phone-hangup-outline:before{content:"\F1192"}.mdi-phone-in-talk:before{content:"\F03F6"}.mdi-phone-in-talk-outline:before{content:"\F1182"}.mdi-phone-incoming:before{content:"\F03F7"}.mdi-phone-incoming-outline:before{content:"\F1193"}.mdi-phone-lock:before{content:"\F03F8"}.mdi-phone-lock-outline:before{content:"\F1194"}.mdi-phone-log:before{content:"\F03F9"}.mdi-phone-log-outline:before{content:"\F1195"}.mdi-phone-message:before{content:"\F1196"}.mdi-phone-message-outline:before{content:"\F1197"}.mdi-phone-minus:before{content:"\F0658"}.mdi-phone-minus-outline:before{content:"\F1198"}.mdi-phone-missed:before{content:"\F03FA"}.mdi-phone-missed-outline:before{content:"\F11A5"}.mdi-phone-off:before{content:"\F0DEF"}.mdi-phone-off-outline:before{content:"\F11A6"}.mdi-phone-outgoing:before{content:"\F03FB"}.mdi-phone-outgoing-outline:before{content:"\F1199"}.mdi-phone-outline:before{content:"\F0DF0"}.mdi-phone-paused:before{content:"\F03FC"}.mdi-phone-paused-outline:before{content:"\F119A"}.mdi-phone-plus:before{content:"\F0659"}.mdi-phone-plus-outline:before{content:"\F119B"}.mdi-phone-remove:before{content:"\F152F"}.mdi-phone-remove-outline:before{content:"\F1530"}.mdi-phone-return:before{content:"\F082F"}.mdi-phone-return-outline:before{content:"\F119C"}.mdi-phone-ring:before{content:"\F11AB"}.mdi-phone-ring-outline:before{content:"\F11AC"}.mdi-phone-rotate-landscape:before{content:"\F0885"}.mdi-phone-rotate-portrait:before{content:"\F0886"}.mdi-phone-settings:before{content:"\F03FD"}.mdi-phone-settings-outline:before{content:"\F119D"}.mdi-phone-voip:before{content:"\F03FE"}.mdi-pi:before{content:"\F03FF"}.mdi-pi-box:before{content:"\F0400"}.mdi-pi-hole:before{content:"\F0DF1"}.mdi-piano:before{content:"\F067D"}.mdi-pickaxe:before{content:"\F08B7"}.mdi-picture-in-picture-bottom-right:before{content:"\F0E57"}.mdi-picture-in-picture-bottom-right-outline:before{content:"\F0E58"}.mdi-picture-in-picture-top-right:before{content:"\F0E59"}.mdi-picture-in-picture-top-right-outline:before{content:"\F0E5A"}.mdi-pier:before{content:"\F0887"}.mdi-pier-crane:before{content:"\F0888"}.mdi-pig:before{content:"\F0401"}.mdi-pig-variant:before{content:"\F1006"}.mdi-pig-variant-outline:before{content:"\F1678"}.mdi-piggy-bank:before{content:"\F1007"}.mdi-piggy-bank-outline:before{content:"\F1679"}.mdi-pill:before{content:"\F0402"}.mdi-pillar:before{content:"\F0702"}.mdi-pin:before{content:"\F0403"}.mdi-pin-off:before{content:"\F0404"}.mdi-pin-off-outline:before{content:"\F0930"}.mdi-pin-outline:before{content:"\F0931"}.mdi-pine-tree:before{content:"\F0405"}.mdi-pine-tree-box:before{content:"\F0406"}.mdi-pine-tree-fire:before{content:"\F141A"}.mdi-pinterest:before{content:"\F0407"}.mdi-pinwheel:before{content:"\F0AD5"}.mdi-pinwheel-outline:before{content:"\F0AD6"}.mdi-pipe:before{content:"\F07E5"}.mdi-pipe-disconnected:before{content:"\F07E6"}.mdi-pipe-leak:before{content:"\F0889"}.mdi-pipe-wrench:before{content:"\F1354"}.mdi-pirate:before{content:"\F0A08"}.mdi-pistol:before{content:"\F0703"}.mdi-piston:before{content:"\F088A"}.mdi-pitchfork:before{content:"\F1553"}.mdi-pizza:before{content:"\F0409"}.mdi-play:before{content:"\F040A"}.mdi-play-box:before{content:"\F127A"}.mdi-play-box-multiple:before{content:"\F0D19"}.mdi-play-box-multiple-outline:before{content:"\F13E6"}.mdi-play-box-outline:before{content:"\F040B"}.mdi-play-circle:before{content:"\F040C"}.mdi-play-circle-outline:before{content:"\F040D"}.mdi-play-network:before{content:"\F088B"}.mdi-play-network-outline:before{content:"\F0CB7"}.mdi-play-outline:before{content:"\F0F1B"}.mdi-play-pause:before{content:"\F040E"}.mdi-play-protected-content:before{content:"\F040F"}.mdi-play-speed:before{content:"\F08FF"}.mdi-playlist-check:before{content:"\F05C7"}.mdi-playlist-edit:before{content:"\F0900"}.mdi-playlist-minus:before{content:"\F0410"}.mdi-playlist-music:before{content:"\F0CB8"}.mdi-playlist-music-outline:before{content:"\F0CB9"}.mdi-playlist-play:before{content:"\F0411"}.mdi-playlist-plus:before{content:"\F0412"}.mdi-playlist-remove:before{content:"\F0413"}.mdi-playlist-star:before{content:"\F0DF2"}.mdi-plex:before{content:"\F06BA"}.mdi-plus:before{content:"\F0415"}.mdi-plus-box:before{content:"\F0416"}.mdi-plus-box-multiple:before{content:"\F0334"}.mdi-plus-box-multiple-outline:before{content:"\F1143"}.mdi-plus-box-outline:before{content:"\F0704"}.mdi-plus-circle:before{content:"\F0417"}.mdi-plus-circle-multiple:before{content:"\F034C"}.mdi-plus-circle-multiple-outline:before{content:"\F0418"}.mdi-plus-circle-outline:before{content:"\F0419"}.mdi-plus-minus:before{content:"\F0992"}.mdi-plus-minus-box:before{content:"\F0993"}.mdi-plus-minus-variant:before{content:"\F14C9"}.mdi-plus-network:before{content:"\F041A"}.mdi-plus-network-outline:before{content:"\F0CBA"}.mdi-plus-one:before{content:"\F041B"}.mdi-plus-outline:before{content:"\F0705"}.mdi-plus-thick:before{content:"\F11EC"}.mdi-podcast:before{content:"\F0994"}.mdi-podium:before{content:"\F0D25"}.mdi-podium-bronze:before{content:"\F0D26"}.mdi-podium-gold:before{content:"\F0D27"}.mdi-podium-silver:before{content:"\F0D28"}.mdi-point-of-sale:before{content:"\F0D92"}.mdi-pokeball:before{content:"\F041D"}.mdi-pokemon-go:before{content:"\F0A09"}.mdi-poker-chip:before{content:"\F0830"}.mdi-polaroid:before{content:"\F041E"}.mdi-police-badge:before{content:"\F1167"}.mdi-police-badge-outline:before{content:"\F1168"}.mdi-poll:before{content:"\F041F"}.mdi-poll-box:before{content:"\F0420"}.mdi-poll-box-outline:before{content:"\F127B"}.mdi-polo:before{content:"\F14C3"}.mdi-polymer:before{content:"\F0421"}.mdi-pool:before{content:"\F0606"}.mdi-popcorn:before{content:"\F0422"}.mdi-post:before{content:"\F1008"}.mdi-post-outline:before{content:"\F1009"}.mdi-postage-stamp:before{content:"\F0CBB"}.mdi-pot:before{content:"\F02E5"}.mdi-pot-mix:before{content:"\F065B"}.mdi-pot-mix-outline:before{content:"\F0677"}.mdi-pot-outline:before{content:"\F02FF"}.mdi-pot-steam:before{content:"\F065A"}.mdi-pot-steam-outline:before{content:"\F0326"}.mdi-pound:before{content:"\F0423"}.mdi-pound-box:before{content:"\F0424"}.mdi-pound-box-outline:before{content:"\F117F"}.mdi-power:before{content:"\F0425"}.mdi-power-cycle:before{content:"\F0901"}.mdi-power-off:before{content:"\F0902"}.mdi-power-on:before{content:"\F0903"}.mdi-power-plug:before{content:"\F06A5"}.mdi-power-plug-off:before{content:"\F06A6"}.mdi-power-plug-off-outline:before{content:"\F1424"}.mdi-power-plug-outline:before{content:"\F1425"}.mdi-power-settings:before{content:"\F0426"}.mdi-power-sleep:before{content:"\F0904"}.mdi-power-socket:before{content:"\F0427"}.mdi-power-socket-au:before{content:"\F0905"}.mdi-power-socket-de:before{content:"\F1107"}.mdi-power-socket-eu:before{content:"\F07E7"}.mdi-power-socket-fr:before{content:"\F1108"}.mdi-power-socket-it:before{content:"\F14FF"}.mdi-power-socket-jp:before{content:"\F1109"}.mdi-power-socket-uk:before{content:"\F07E8"}.mdi-power-socket-us:before{content:"\F07E9"}.mdi-power-standby:before{content:"\F0906"}.mdi-powershell:before{content:"\F0A0A"}.mdi-prescription:before{content:"\F0706"}.mdi-presentation:before{content:"\F0428"}.mdi-presentation-play:before{content:"\F0429"}.mdi-pretzel:before{content:"\F1562"}.mdi-printer:before{content:"\F042A"}.mdi-printer-3d:before{content:"\F042B"}.mdi-printer-3d-nozzle:before{content:"\F0E5B"}.mdi-printer-3d-nozzle-alert:before{content:"\F11C0"}.mdi-printer-3d-nozzle-alert-outline:before{content:"\F11C1"}.mdi-printer-3d-nozzle-outline:before{content:"\F0E5C"}.mdi-printer-alert:before{content:"\F042C"}.mdi-printer-check:before{content:"\F1146"}.mdi-printer-eye:before{content:"\F1458"}.mdi-printer-off:before{content:"\F0E5D"}.mdi-printer-pos:before{content:"\F1057"}.mdi-printer-search:before{content:"\F1457"}.mdi-printer-settings:before{content:"\F0707"}.mdi-printer-wireless:before{content:"\F0A0B"}.mdi-priority-high:before{content:"\F0603"}.mdi-priority-low:before{content:"\F0604"}.mdi-professional-hexagon:before{content:"\F042D"}.mdi-progress-alert:before{content:"\F0CBC"}.mdi-progress-check:before{content:"\F0995"}.mdi-progress-clock:before{content:"\F0996"}.mdi-progress-close:before{content:"\F110A"}.mdi-progress-download:before{content:"\F0997"}.mdi-progress-question:before{content:"\F1522"}.mdi-progress-upload:before{content:"\F0998"}.mdi-progress-wrench:before{content:"\F0CBD"}.mdi-projector:before{content:"\F042E"}.mdi-projector-screen:before{content:"\F042F"}.mdi-projector-screen-outline:before{content:"\F1724"}.mdi-propane-tank:before{content:"\F1357"}.mdi-propane-tank-outline:before{content:"\F1358"}.mdi-protocol:before{content:"\F0FD8"}.mdi-publish:before{content:"\F06A7"}.mdi-pulse:before{content:"\F0430"}.mdi-pump:before{content:"\F1402"}.mdi-pumpkin:before{content:"\F0BBF"}.mdi-purse:before{content:"\F0F1C"}.mdi-purse-outline:before{content:"\F0F1D"}.mdi-puzzle:before{content:"\F0431"}.mdi-puzzle-check:before{content:"\F1426"}.mdi-puzzle-check-outline:before{content:"\F1427"}.mdi-puzzle-edit:before{content:"\F14D3"}.mdi-puzzle-edit-outline:before{content:"\F14D9"}.mdi-puzzle-heart:before{content:"\F14D4"}.mdi-puzzle-heart-outline:before{content:"\F14DA"}.mdi-puzzle-minus:before{content:"\F14D1"}.mdi-puzzle-minus-outline:before{content:"\F14D7"}.mdi-puzzle-outline:before{content:"\F0A66"}.mdi-puzzle-plus:before{content:"\F14D0"}.mdi-puzzle-plus-outline:before{content:"\F14D6"}.mdi-puzzle-remove:before{content:"\F14D2"}.mdi-puzzle-remove-outline:before{content:"\F14D8"}.mdi-puzzle-star:before{content:"\F14D5"}.mdi-puzzle-star-outline:before{content:"\F14DB"}.mdi-qi:before{content:"\F0999"}.mdi-qqchat:before{content:"\F0605"}.mdi-qrcode:before{content:"\F0432"}.mdi-qrcode-edit:before{content:"\F08B8"}.mdi-qrcode-minus:before{content:"\F118C"}.mdi-qrcode-plus:before{content:"\F118B"}.mdi-qrcode-remove:before{content:"\F118D"}.mdi-qrcode-scan:before{content:"\F0433"}.mdi-quadcopter:before{content:"\F0434"}.mdi-quality-high:before{content:"\F0435"}.mdi-quality-low:before{content:"\F0A0C"}.mdi-quality-medium:before{content:"\F0A0D"}.mdi-quora:before{content:"\F0D29"}.mdi-rabbit:before{content:"\F0907"}.mdi-racing-helmet:before{content:"\F0D93"}.mdi-racquetball:before{content:"\F0D94"}.mdi-radar:before{content:"\F0437"}.mdi-radiator:before{content:"\F0438"}.mdi-radiator-disabled:before{content:"\F0AD7"}.mdi-radiator-off:before{content:"\F0AD8"}.mdi-radio:before{content:"\F0439"}.mdi-radio-am:before{content:"\F0CBE"}.mdi-radio-fm:before{content:"\F0CBF"}.mdi-radio-handheld:before{content:"\F043A"}.mdi-radio-off:before{content:"\F121C"}.mdi-radio-tower:before{content:"\F043B"}.mdi-radioactive:before{content:"\F043C"}.mdi-radioactive-off:before{content:"\F0EC1"}.mdi-radiobox-blank:before{content:"\F043D"}.mdi-radiobox-marked:before{content:"\F043E"}.mdi-radiology-box:before{content:"\F14C5"}.mdi-radiology-box-outline:before{content:"\F14C6"}.mdi-radius:before{content:"\F0CC0"}.mdi-radius-outline:before{content:"\F0CC1"}.mdi-railroad-light:before{content:"\F0F1E"}.mdi-rake:before{content:"\F1544"}.mdi-raspberry-pi:before{content:"\F043F"}.mdi-ray-end:before{content:"\F0440"}.mdi-ray-end-arrow:before{content:"\F0441"}.mdi-ray-start:before{content:"\F0442"}.mdi-ray-start-arrow:before{content:"\F0443"}.mdi-ray-start-end:before{content:"\F0444"}.mdi-ray-start-vertex-end:before{content:"\F15D8"}.mdi-ray-vertex:before{content:"\F0445"}.mdi-react:before{content:"\F0708"}.mdi-read:before{content:"\F0447"}.mdi-receipt:before{content:"\F0449"}.mdi-record:before{content:"\F044A"}.mdi-record-circle:before{content:"\F0EC2"}.mdi-record-circle-outline:before{content:"\F0EC3"}.mdi-record-player:before{content:"\F099A"}.mdi-record-rec:before{content:"\F044B"}.mdi-rectangle:before{content:"\F0E5E"}.mdi-rectangle-outline:before{content:"\F0E5F"}.mdi-recycle:before{content:"\F044C"}.mdi-recycle-variant:before{content:"\F139D"}.mdi-reddit:before{content:"\F044D"}.mdi-redhat:before{content:"\F111B"}.mdi-redo:before{content:"\F044E"}.mdi-redo-variant:before{content:"\F044F"}.mdi-reflect-horizontal:before{content:"\F0A0E"}.mdi-reflect-vertical:before{content:"\F0A0F"}.mdi-refresh:before{content:"\F0450"}.mdi-refresh-circle:before{content:"\F1377"}.mdi-regex:before{content:"\F0451"}.mdi-registered-trademark:before{content:"\F0A67"}.mdi-reiterate:before{content:"\F1588"}.mdi-relation-many-to-many:before{content:"\F1496"}.mdi-relation-many-to-one:before{content:"\F1497"}.mdi-relation-many-to-one-or-many:before{content:"\F1498"}.mdi-relation-many-to-only-one:before{content:"\F1499"}.mdi-relation-many-to-zero-or-many:before{content:"\F149A"}.mdi-relation-many-to-zero-or-one:before{content:"\F149B"}.mdi-relation-one-or-many-to-many:before{content:"\F149C"}.mdi-relation-one-or-many-to-one:before{content:"\F149D"}.mdi-relation-one-or-many-to-one-or-many:before{content:"\F149E"}.mdi-relation-one-or-many-to-only-one:before{content:"\F149F"}.mdi-relation-one-or-many-to-zero-or-many:before{content:"\F14A0"}.mdi-relation-one-or-many-to-zero-or-one:before{content:"\F14A1"}.mdi-relation-one-to-many:before{content:"\F14A2"}.mdi-relation-one-to-one:before{content:"\F14A3"}.mdi-relation-one-to-one-or-many:before{content:"\F14A4"}.mdi-relation-one-to-only-one:before{content:"\F14A5"}.mdi-relation-one-to-zero-or-many:before{content:"\F14A6"}.mdi-relation-one-to-zero-or-one:before{content:"\F14A7"}.mdi-relation-only-one-to-many:before{content:"\F14A8"}.mdi-relation-only-one-to-one:before{content:"\F14A9"}.mdi-relation-only-one-to-one-or-many:before{content:"\F14AA"}.mdi-relation-only-one-to-only-one:before{content:"\F14AB"}.mdi-relation-only-one-to-zero-or-many:before{content:"\F14AC"}.mdi-relation-only-one-to-zero-or-one:before{content:"\F14AD"}.mdi-relation-zero-or-many-to-many:before{content:"\F14AE"}.mdi-relation-zero-or-many-to-one:before{content:"\F14AF"}.mdi-relation-zero-or-many-to-one-or-many:before{content:"\F14B0"}.mdi-relation-zero-or-many-to-only-one:before{content:"\F14B1"}.mdi-relation-zero-or-many-to-zero-or-many:before{content:"\F14B2"}.mdi-relation-zero-or-many-to-zero-or-one:before{content:"\F14B3"}.mdi-relation-zero-or-one-to-many:before{content:"\F14B4"}.mdi-relation-zero-or-one-to-one:before{content:"\F14B5"}.mdi-relation-zero-or-one-to-one-or-many:before{content:"\F14B6"}.mdi-relation-zero-or-one-to-only-one:before{content:"\F14B7"}.mdi-relation-zero-or-one-to-zero-or-many:before{content:"\F14B8"}.mdi-relation-zero-or-one-to-zero-or-one:before{content:"\F14B9"}.mdi-relative-scale:before{content:"\F0452"}.mdi-reload:before{content:"\F0453"}.mdi-reload-alert:before{content:"\F110B"}.mdi-reminder:before{content:"\F088C"}.mdi-remote:before{content:"\F0454"}.mdi-remote-desktop:before{content:"\F08B9"}.mdi-remote-off:before{content:"\F0EC4"}.mdi-remote-tv:before{content:"\F0EC5"}.mdi-remote-tv-off:before{content:"\F0EC6"}.mdi-rename-box:before{content:"\F0455"}.mdi-reorder-horizontal:before{content:"\F0688"}.mdi-reorder-vertical:before{content:"\F0689"}.mdi-repeat:before{content:"\F0456"}.mdi-repeat-off:before{content:"\F0457"}.mdi-repeat-once:before{content:"\F0458"}.mdi-replay:before{content:"\F0459"}.mdi-reply:before{content:"\F045A"}.mdi-reply-all:before{content:"\F045B"}.mdi-reply-all-outline:before{content:"\F0F1F"}.mdi-reply-circle:before{content:"\F11AE"}.mdi-reply-outline:before{content:"\F0F20"}.mdi-reproduction:before{content:"\F045C"}.mdi-resistor:before{content:"\F0B44"}.mdi-resistor-nodes:before{content:"\F0B45"}.mdi-resize:before{content:"\F0A68"}.mdi-resize-bottom-right:before{content:"\F045D"}.mdi-responsive:before{content:"\F045E"}.mdi-restart:before{content:"\F0709"}.mdi-restart-alert:before{content:"\F110C"}.mdi-restart-off:before{content:"\F0D95"}.mdi-restore:before{content:"\F099B"}.mdi-restore-alert:before{content:"\F110D"}.mdi-rewind:before{content:"\F045F"}.mdi-rewind-10:before{content:"\F0D2A"}.mdi-rewind-30:before{content:"\F0D96"}.mdi-rewind-5:before{content:"\F11F9"}.mdi-rewind-60:before{content:"\F160C"}.mdi-rewind-outline:before{content:"\F070A"}.mdi-rhombus:before{content:"\F070B"}.mdi-rhombus-medium:before{content:"\F0A10"}.mdi-rhombus-medium-outline:before{content:"\F14DC"}.mdi-rhombus-outline:before{content:"\F070C"}.mdi-rhombus-split:before{content:"\F0A11"}.mdi-rhombus-split-outline:before{content:"\F14DD"}.mdi-ribbon:before{content:"\F0460"}.mdi-rice:before{content:"\F07EA"}.mdi-rickshaw:before{content:"\F15BB"}.mdi-rickshaw-electric:before{content:"\F15BC"}.mdi-ring:before{content:"\F07EB"}.mdi-rivet:before{content:"\F0E60"}.mdi-road:before{content:"\F0461"}.mdi-road-variant:before{content:"\F0462"}.mdi-robber:before{content:"\F1058"}.mdi-robot:before{content:"\F06A9"}.mdi-robot-angry:before{content:"\F169D"}.mdi-robot-angry-outline:before{content:"\F169E"}.mdi-robot-confused:before{content:"\F169F"}.mdi-robot-confused-outline:before{content:"\F16A0"}.mdi-robot-dead:before{content:"\F16A1"}.mdi-robot-dead-outline:before{content:"\F16A2"}.mdi-robot-excited:before{content:"\F16A3"}.mdi-robot-excited-outline:before{content:"\F16A4"}.mdi-robot-happy:before{content:"\F1719"}.mdi-robot-happy-outline:before{content:"\F171A"}.mdi-robot-industrial:before{content:"\F0B46"}.mdi-robot-love:before{content:"\F16A5"}.mdi-robot-love-outline:before{content:"\F16A6"}.mdi-robot-mower:before{content:"\F11F7"}.mdi-robot-mower-outline:before{content:"\F11F3"}.mdi-robot-off:before{content:"\F16A7"}.mdi-robot-off-outline:before{content:"\F167B"}.mdi-robot-outline:before{content:"\F167A"}.mdi-robot-vacuum:before{content:"\F070D"}.mdi-robot-vacuum-variant:before{content:"\F0908"}.mdi-rocket:before{content:"\F0463"}.mdi-rocket-launch:before{content:"\F14DE"}.mdi-rocket-launch-outline:before{content:"\F14DF"}.mdi-rocket-outline:before{content:"\F13AF"}.mdi-rodent:before{content:"\F1327"}.mdi-roller-skate:before{content:"\F0D2B"}.mdi-roller-skate-off:before{content:"\F0145"}.mdi-rollerblade:before{content:"\F0D2C"}.mdi-rollerblade-off:before{content:"\F002E"}.mdi-rollupjs:before{content:"\F0BC0"}.mdi-roman-numeral-1:before{content:"\F1088"}.mdi-roman-numeral-10:before{content:"\F1091"}.mdi-roman-numeral-2:before{content:"\F1089"}.mdi-roman-numeral-3:before{content:"\F108A"}.mdi-roman-numeral-4:before{content:"\F108B"}.mdi-roman-numeral-5:before{content:"\F108C"}.mdi-roman-numeral-6:before{content:"\F108D"}.mdi-roman-numeral-7:before{content:"\F108E"}.mdi-roman-numeral-8:before{content:"\F108F"}.mdi-roman-numeral-9:before{content:"\F1090"}.mdi-room-service:before{content:"\F088D"}.mdi-room-service-outline:before{content:"\F0D97"}.mdi-rotate-3d:before{content:"\F0EC7"}.mdi-rotate-3d-variant:before{content:"\F0464"}.mdi-rotate-left:before{content:"\F0465"}.mdi-rotate-left-variant:before{content:"\F0466"}.mdi-rotate-orbit:before{content:"\F0D98"}.mdi-rotate-right:before{content:"\F0467"}.mdi-rotate-right-variant:before{content:"\F0468"}.mdi-rounded-corner:before{content:"\F0607"}.mdi-router:before{content:"\F11E2"}.mdi-router-network:before{content:"\F1087"}.mdi-router-wireless:before{content:"\F0469"}.mdi-router-wireless-off:before{content:"\F15A3"}.mdi-router-wireless-settings:before{content:"\F0A69"}.mdi-routes:before{content:"\F046A"}.mdi-routes-clock:before{content:"\F1059"}.mdi-rowing:before{content:"\F0608"}.mdi-rss:before{content:"\F046B"}.mdi-rss-box:before{content:"\F046C"}.mdi-rss-off:before{content:"\F0F21"}.mdi-rug:before{content:"\F1475"}.mdi-rugby:before{content:"\F0D99"}.mdi-ruler:before{content:"\F046D"}.mdi-ruler-square:before{content:"\F0CC2"}.mdi-ruler-square-compass:before{content:"\F0EBE"}.mdi-run:before{content:"\F070E"}.mdi-run-fast:before{content:"\F046E"}.mdi-rv-truck:before{content:"\F11D4"}.mdi-sack:before{content:"\F0D2E"}.mdi-sack-percent:before{content:"\F0D2F"}.mdi-safe:before{content:"\F0A6A"}.mdi-safe-square:before{content:"\F127C"}.mdi-safe-square-outline:before{content:"\F127D"}.mdi-safety-goggles:before{content:"\F0D30"}.mdi-sail-boat:before{content:"\F0EC8"}.mdi-sale:before{content:"\F046F"}.mdi-salesforce:before{content:"\F088E"}.mdi-sass:before{content:"\F07EC"}.mdi-satellite:before{content:"\F0470"}.mdi-satellite-uplink:before{content:"\F0909"}.mdi-satellite-variant:before{content:"\F0471"}.mdi-sausage:before{content:"\F08BA"}.mdi-saw-blade:before{content:"\F0E61"}.mdi-sawtooth-wave:before{content:"\F147A"}.mdi-saxophone:before{content:"\F0609"}.mdi-scale:before{content:"\F0472"}.mdi-scale-balance:before{content:"\F05D1"}.mdi-scale-bathroom:before{content:"\F0473"}.mdi-scale-off:before{content:"\F105A"}.mdi-scan-helper:before{content:"\F13D8"}.mdi-scanner:before{content:"\F06AB"}.mdi-scanner-off:before{content:"\F090A"}.mdi-scatter-plot:before{content:"\F0EC9"}.mdi-scatter-plot-outline:before{content:"\F0ECA"}.mdi-school:before{content:"\F0474"}.mdi-school-outline:before{content:"\F1180"}.mdi-scissors-cutting:before{content:"\F0A6B"}.mdi-scooter:before{content:"\F15BD"}.mdi-scooter-electric:before{content:"\F15BE"}.mdi-scoreboard:before{content:"\F127E"}.mdi-scoreboard-outline:before{content:"\F127F"}.mdi-screen-rotation:before{content:"\F0475"}.mdi-screen-rotation-lock:before{content:"\F0478"}.mdi-screw-flat-top:before{content:"\F0DF3"}.mdi-screw-lag:before{content:"\F0DF4"}.mdi-screw-machine-flat-top:before{content:"\F0DF5"}.mdi-screw-machine-round-top:before{content:"\F0DF6"}.mdi-screw-round-top:before{content:"\F0DF7"}.mdi-screwdriver:before{content:"\F0476"}.mdi-script:before{content:"\F0BC1"}.mdi-script-outline:before{content:"\F0477"}.mdi-script-text:before{content:"\F0BC2"}.mdi-script-text-key:before{content:"\F1725"}.mdi-script-text-key-outline:before{content:"\F1726"}.mdi-script-text-outline:before{content:"\F0BC3"}.mdi-script-text-play:before{content:"\F1727"}.mdi-script-text-play-outline:before{content:"\F1728"}.mdi-sd:before{content:"\F0479"}.mdi-seal:before{content:"\F047A"}.mdi-seal-variant:before{content:"\F0FD9"}.mdi-search-web:before{content:"\F070F"}.mdi-seat:before{content:"\F0CC3"}.mdi-seat-flat:before{content:"\F047B"}.mdi-seat-flat-angled:before{content:"\F047C"}.mdi-seat-individual-suite:before{content:"\F047D"}.mdi-seat-legroom-extra:before{content:"\F047E"}.mdi-seat-legroom-normal:before{content:"\F047F"}.mdi-seat-legroom-reduced:before{content:"\F0480"}.mdi-seat-outline:before{content:"\F0CC4"}.mdi-seat-passenger:before{content:"\F1249"}.mdi-seat-recline-extra:before{content:"\F0481"}.mdi-seat-recline-normal:before{content:"\F0482"}.mdi-seatbelt:before{content:"\F0CC5"}.mdi-security:before{content:"\F0483"}.mdi-security-network:before{content:"\F0484"}.mdi-seed:before{content:"\F0E62"}.mdi-seed-off:before{content:"\F13FD"}.mdi-seed-off-outline:before{content:"\F13FE"}.mdi-seed-outline:before{content:"\F0E63"}.mdi-seesaw:before{content:"\F15A4"}.mdi-segment:before{content:"\F0ECB"}.mdi-select:before{content:"\F0485"}.mdi-select-all:before{content:"\F0486"}.mdi-select-color:before{content:"\F0D31"}.mdi-select-compare:before{content:"\F0AD9"}.mdi-select-drag:before{content:"\F0A6C"}.mdi-select-group:before{content:"\F0F82"}.mdi-select-inverse:before{content:"\F0487"}.mdi-select-marker:before{content:"\F1280"}.mdi-select-multiple:before{content:"\F1281"}.mdi-select-multiple-marker:before{content:"\F1282"}.mdi-select-off:before{content:"\F0488"}.mdi-select-place:before{content:"\F0FDA"}.mdi-select-search:before{content:"\F1204"}.mdi-selection:before{content:"\F0489"}.mdi-selection-drag:before{content:"\F0A6D"}.mdi-selection-ellipse:before{content:"\F0D32"}.mdi-selection-ellipse-arrow-inside:before{content:"\F0F22"}.mdi-selection-marker:before{content:"\F1283"}.mdi-selection-multiple:before{content:"\F1285"}.mdi-selection-multiple-marker:before{content:"\F1284"}.mdi-selection-off:before{content:"\F0777"}.mdi-selection-search:before{content:"\F1205"}.mdi-semantic-web:before{content:"\F1316"}.mdi-send:before{content:"\F048A"}.mdi-send-check:before{content:"\F1161"}.mdi-send-check-outline:before{content:"\F1162"}.mdi-send-circle:before{content:"\F0DF8"}.mdi-send-circle-outline:before{content:"\F0DF9"}.mdi-send-clock:before{content:"\F1163"}.mdi-send-clock-outline:before{content:"\F1164"}.mdi-send-lock:before{content:"\F07ED"}.mdi-send-lock-outline:before{content:"\F1166"}.mdi-send-outline:before{content:"\F1165"}.mdi-serial-port:before{content:"\F065C"}.mdi-server:before{content:"\F048B"}.mdi-server-minus:before{content:"\F048C"}.mdi-server-network:before{content:"\F048D"}.mdi-server-network-off:before{content:"\F048E"}.mdi-server-off:before{content:"\F048F"}.mdi-server-plus:before{content:"\F0490"}.mdi-server-remove:before{content:"\F0491"}.mdi-server-security:before{content:"\F0492"}.mdi-set-all:before{content:"\F0778"}.mdi-set-center:before{content:"\F0779"}.mdi-set-center-right:before{content:"\F077A"}.mdi-set-left:before{content:"\F077B"}.mdi-set-left-center:before{content:"\F077C"}.mdi-set-left-right:before{content:"\F077D"}.mdi-set-merge:before{content:"\F14E0"}.mdi-set-none:before{content:"\F077E"}.mdi-set-right:before{content:"\F077F"}.mdi-set-split:before{content:"\F14E1"}.mdi-set-square:before{content:"\F145D"}.mdi-set-top-box:before{content:"\F099F"}.mdi-settings-helper:before{content:"\F0A6E"}.mdi-shaker:before{content:"\F110E"}.mdi-shaker-outline:before{content:"\F110F"}.mdi-shape:before{content:"\F0831"}.mdi-shape-circle-plus:before{content:"\F065D"}.mdi-shape-outline:before{content:"\F0832"}.mdi-shape-oval-plus:before{content:"\F11FA"}.mdi-shape-plus:before{content:"\F0495"}.mdi-shape-polygon-plus:before{content:"\F065E"}.mdi-shape-rectangle-plus:before{content:"\F065F"}.mdi-shape-square-plus:before{content:"\F0660"}.mdi-shape-square-rounded-plus:before{content:"\F14FA"}.mdi-share:before{content:"\F0496"}.mdi-share-all:before{content:"\F11F4"}.mdi-share-all-outline:before{content:"\F11F5"}.mdi-share-circle:before{content:"\F11AD"}.mdi-share-off:before{content:"\F0F23"}.mdi-share-off-outline:before{content:"\F0F24"}.mdi-share-outline:before{content:"\F0932"}.mdi-share-variant:before{content:"\F0497"}.mdi-share-variant-outline:before{content:"\F1514"}.mdi-shark-fin:before{content:"\F1673"}.mdi-shark-fin-outline:before{content:"\F1674"}.mdi-sheep:before{content:"\F0CC6"}.mdi-shield:before{content:"\F0498"}.mdi-shield-account:before{content:"\F088F"}.mdi-shield-account-outline:before{content:"\F0A12"}.mdi-shield-account-variant:before{content:"\F15A7"}.mdi-shield-account-variant-outline:before{content:"\F15A8"}.mdi-shield-airplane:before{content:"\F06BB"}.mdi-shield-airplane-outline:before{content:"\F0CC7"}.mdi-shield-alert:before{content:"\F0ECC"}.mdi-shield-alert-outline:before{content:"\F0ECD"}.mdi-shield-bug:before{content:"\F13DA"}.mdi-shield-bug-outline:before{content:"\F13DB"}.mdi-shield-car:before{content:"\F0F83"}.mdi-shield-check:before{content:"\F0565"}.mdi-shield-check-outline:before{content:"\F0CC8"}.mdi-shield-cross:before{content:"\F0CC9"}.mdi-shield-cross-outline:before{content:"\F0CCA"}.mdi-shield-edit:before{content:"\F11A0"}.mdi-shield-edit-outline:before{content:"\F11A1"}.mdi-shield-half:before{content:"\F1360"}.mdi-shield-half-full:before{content:"\F0780"}.mdi-shield-home:before{content:"\F068A"}.mdi-shield-home-outline:before{content:"\F0CCB"}.mdi-shield-key:before{content:"\F0BC4"}.mdi-shield-key-outline:before{content:"\F0BC5"}.mdi-shield-link-variant:before{content:"\F0D33"}.mdi-shield-link-variant-outline:before{content:"\F0D34"}.mdi-shield-lock:before{content:"\F099D"}.mdi-shield-lock-outline:before{content:"\F0CCC"}.mdi-shield-off:before{content:"\F099E"}.mdi-shield-off-outline:before{content:"\F099C"}.mdi-shield-outline:before{content:"\F0499"}.mdi-shield-plus:before{content:"\F0ADA"}.mdi-shield-plus-outline:before{content:"\F0ADB"}.mdi-shield-refresh:before{content:"\F00AA"}.mdi-shield-refresh-outline:before{content:"\F01E0"}.mdi-shield-remove:before{content:"\F0ADC"}.mdi-shield-remove-outline:before{content:"\F0ADD"}.mdi-shield-search:before{content:"\F0D9A"}.mdi-shield-star:before{content:"\F113B"}.mdi-shield-star-outline:before{content:"\F113C"}.mdi-shield-sun:before{content:"\F105D"}.mdi-shield-sun-outline:before{content:"\F105E"}.mdi-shield-sync:before{content:"\F11A2"}.mdi-shield-sync-outline:before{content:"\F11A3"}.mdi-ship-wheel:before{content:"\F0833"}.mdi-shoe-ballet:before{content:"\F15CA"}.mdi-shoe-cleat:before{content:"\F15C7"}.mdi-shoe-formal:before{content:"\F0B47"}.mdi-shoe-heel:before{content:"\F0B48"}.mdi-shoe-print:before{content:"\F0DFA"}.mdi-shoe-sneaker:before{content:"\F15C8"}.mdi-shopping:before{content:"\F049A"}.mdi-shopping-music:before{content:"\F049B"}.mdi-shopping-outline:before{content:"\F11D5"}.mdi-shopping-search:before{content:"\F0F84"}.mdi-shore:before{content:"\F14F9"}.mdi-shovel:before{content:"\F0710"}.mdi-shovel-off:before{content:"\F0711"}.mdi-shower:before{content:"\F09A0"}.mdi-shower-head:before{content:"\F09A1"}.mdi-shredder:before{content:"\F049C"}.mdi-shuffle:before{content:"\F049D"}.mdi-shuffle-disabled:before{content:"\F049E"}.mdi-shuffle-variant:before{content:"\F049F"}.mdi-shuriken:before{content:"\F137F"}.mdi-sigma:before{content:"\F04A0"}.mdi-sigma-lower:before{content:"\F062B"}.mdi-sign-caution:before{content:"\F04A1"}.mdi-sign-direction:before{content:"\F0781"}.mdi-sign-direction-minus:before{content:"\F1000"}.mdi-sign-direction-plus:before{content:"\F0FDC"}.mdi-sign-direction-remove:before{content:"\F0FDD"}.mdi-sign-pole:before{content:"\F14F8"}.mdi-sign-real-estate:before{content:"\F1118"}.mdi-sign-text:before{content:"\F0782"}.mdi-signal:before{content:"\F04A2"}.mdi-signal-2g:before{content:"\F0712"}.mdi-signal-3g:before{content:"\F0713"}.mdi-signal-4g:before{content:"\F0714"}.mdi-signal-5g:before{content:"\F0A6F"}.mdi-signal-cellular-1:before{content:"\F08BC"}.mdi-signal-cellular-2:before{content:"\F08BD"}.mdi-signal-cellular-3:before{content:"\F08BE"}.mdi-signal-cellular-outline:before{content:"\F08BF"}.mdi-signal-distance-variant:before{content:"\F0E64"}.mdi-signal-hspa:before{content:"\F0715"}.mdi-signal-hspa-plus:before{content:"\F0716"}.mdi-signal-off:before{content:"\F0783"}.mdi-signal-variant:before{content:"\F060A"}.mdi-signature:before{content:"\F0DFB"}.mdi-signature-freehand:before{content:"\F0DFC"}.mdi-signature-image:before{content:"\F0DFD"}.mdi-signature-text:before{content:"\F0DFE"}.mdi-silo:before{content:"\F0B49"}.mdi-silverware:before{content:"\F04A3"}.mdi-silverware-clean:before{content:"\F0FDE"}.mdi-silverware-fork:before{content:"\F04A4"}.mdi-silverware-fork-knife:before{content:"\F0A70"}.mdi-silverware-spoon:before{content:"\F04A5"}.mdi-silverware-variant:before{content:"\F04A6"}.mdi-sim:before{content:"\F04A7"}.mdi-sim-alert:before{content:"\F04A8"}.mdi-sim-alert-outline:before{content:"\F15D3"}.mdi-sim-off:before{content:"\F04A9"}.mdi-sim-off-outline:before{content:"\F15D4"}.mdi-sim-outline:before{content:"\F15D5"}.mdi-simple-icons:before{content:"\F131D"}.mdi-sina-weibo:before{content:"\F0ADF"}.mdi-sine-wave:before{content:"\F095B"}.mdi-sitemap:before{content:"\F04AA"}.mdi-size-l:before{content:"\F13A6"}.mdi-size-m:before{content:"\F13A5"}.mdi-size-s:before{content:"\F13A4"}.mdi-size-xl:before{content:"\F13A7"}.mdi-size-xs:before{content:"\F13A3"}.mdi-size-xxl:before{content:"\F13A8"}.mdi-size-xxs:before{content:"\F13A2"}.mdi-size-xxxl:before{content:"\F13A9"}.mdi-skate:before{content:"\F0D35"}.mdi-skateboard:before{content:"\F14C2"}.mdi-skew-less:before{content:"\F0D36"}.mdi-skew-more:before{content:"\F0D37"}.mdi-ski:before{content:"\F1304"}.mdi-ski-cross-country:before{content:"\F1305"}.mdi-ski-water:before{content:"\F1306"}.mdi-skip-backward:before{content:"\F04AB"}.mdi-skip-backward-outline:before{content:"\F0F25"}.mdi-skip-forward:before{content:"\F04AC"}.mdi-skip-forward-outline:before{content:"\F0F26"}.mdi-skip-next:before{content:"\F04AD"}.mdi-skip-next-circle:before{content:"\F0661"}.mdi-skip-next-circle-outline:before{content:"\F0662"}.mdi-skip-next-outline:before{content:"\F0F27"}.mdi-skip-previous:before{content:"\F04AE"}.mdi-skip-previous-circle:before{content:"\F0663"}.mdi-skip-previous-circle-outline:before{content:"\F0664"}.mdi-skip-previous-outline:before{content:"\F0F28"}.mdi-skull:before{content:"\F068C"}.mdi-skull-crossbones:before{content:"\F0BC6"}.mdi-skull-crossbones-outline:before{content:"\F0BC7"}.mdi-skull-outline:before{content:"\F0BC8"}.mdi-skull-scan:before{content:"\F14C7"}.mdi-skull-scan-outline:before{content:"\F14C8"}.mdi-skype:before{content:"\F04AF"}.mdi-skype-business:before{content:"\F04B0"}.mdi-slack:before{content:"\F04B1"}.mdi-slash-forward:before{content:"\F0FDF"}.mdi-slash-forward-box:before{content:"\F0FE0"}.mdi-sleep:before{content:"\F04B2"}.mdi-sleep-off:before{content:"\F04B3"}.mdi-slide:before{content:"\F15A5"}.mdi-slope-downhill:before{content:"\F0DFF"}.mdi-slope-uphill:before{content:"\F0E00"}.mdi-slot-machine:before{content:"\F1114"}.mdi-slot-machine-outline:before{content:"\F1115"}.mdi-smart-card:before{content:"\F10BD"}.mdi-smart-card-outline:before{content:"\F10BE"}.mdi-smart-card-reader:before{content:"\F10BF"}.mdi-smart-card-reader-outline:before{content:"\F10C0"}.mdi-smog:before{content:"\F0A71"}.mdi-smoke-detector:before{content:"\F0392"}.mdi-smoking:before{content:"\F04B4"}.mdi-smoking-off:before{content:"\F04B5"}.mdi-smoking-pipe:before{content:"\F140D"}.mdi-smoking-pipe-off:before{content:"\F1428"}.mdi-snail:before{content:"\F1677"}.mdi-snake:before{content:"\F150E"}.mdi-snapchat:before{content:"\F04B6"}.mdi-snowboard:before{content:"\F1307"}.mdi-snowflake:before{content:"\F0717"}.mdi-snowflake-alert:before{content:"\F0F29"}.mdi-snowflake-melt:before{content:"\F12CB"}.mdi-snowflake-off:before{content:"\F14E3"}.mdi-snowflake-variant:before{content:"\F0F2A"}.mdi-snowman:before{content:"\F04B7"}.mdi-soccer:before{content:"\F04B8"}.mdi-soccer-field:before{content:"\F0834"}.mdi-social-distance-2-meters:before{content:"\F1579"}.mdi-social-distance-6-feet:before{content:"\F157A"}.mdi-sofa:before{content:"\F04B9"}.mdi-sofa-outline:before{content:"\F156D"}.mdi-sofa-single:before{content:"\F156E"}.mdi-sofa-single-outline:before{content:"\F156F"}.mdi-solar-panel:before{content:"\F0D9B"}.mdi-solar-panel-large:before{content:"\F0D9C"}.mdi-solar-power:before{content:"\F0A72"}.mdi-soldering-iron:before{content:"\F1092"}.mdi-solid:before{content:"\F068D"}.mdi-sony-playstation:before{content:"\F0414"}.mdi-sort:before{content:"\F04BA"}.mdi-sort-alphabetical-ascending:before{content:"\F05BD"}.mdi-sort-alphabetical-ascending-variant:before{content:"\F1148"}.mdi-sort-alphabetical-descending:before{content:"\F05BF"}.mdi-sort-alphabetical-descending-variant:before{content:"\F1149"}.mdi-sort-alphabetical-variant:before{content:"\F04BB"}.mdi-sort-ascending:before{content:"\F04BC"}.mdi-sort-bool-ascending:before{content:"\F1385"}.mdi-sort-bool-ascending-variant:before{content:"\F1386"}.mdi-sort-bool-descending:before{content:"\F1387"}.mdi-sort-bool-descending-variant:before{content:"\F1388"}.mdi-sort-calendar-ascending:before{content:"\F1547"}.mdi-sort-calendar-descending:before{content:"\F1548"}.mdi-sort-clock-ascending:before{content:"\F1549"}.mdi-sort-clock-ascending-outline:before{content:"\F154A"}.mdi-sort-clock-descending:before{content:"\F154B"}.mdi-sort-clock-descending-outline:before{content:"\F154C"}.mdi-sort-descending:before{content:"\F04BD"}.mdi-sort-numeric-ascending:before{content:"\F1389"}.mdi-sort-numeric-ascending-variant:before{content:"\F090D"}.mdi-sort-numeric-descending:before{content:"\F138A"}.mdi-sort-numeric-descending-variant:before{content:"\F0AD2"}.mdi-sort-numeric-variant:before{content:"\F04BE"}.mdi-sort-reverse-variant:before{content:"\F033C"}.mdi-sort-variant:before{content:"\F04BF"}.mdi-sort-variant-lock:before{content:"\F0CCD"}.mdi-sort-variant-lock-open:before{content:"\F0CCE"}.mdi-sort-variant-remove:before{content:"\F1147"}.mdi-soundcloud:before{content:"\F04C0"}.mdi-source-branch:before{content:"\F062C"}.mdi-source-branch-check:before{content:"\F14CF"}.mdi-source-branch-minus:before{content:"\F14CB"}.mdi-source-branch-plus:before{content:"\F14CA"}.mdi-source-branch-refresh:before{content:"\F14CD"}.mdi-source-branch-remove:before{content:"\F14CC"}.mdi-source-branch-sync:before{content:"\F14CE"}.mdi-source-commit:before{content:"\F0718"}.mdi-source-commit-end:before{content:"\F0719"}.mdi-source-commit-end-local:before{content:"\F071A"}.mdi-source-commit-local:before{content:"\F071B"}.mdi-source-commit-next-local:before{content:"\F071C"}.mdi-source-commit-start:before{content:"\F071D"}.mdi-source-commit-start-next-local:before{content:"\F071E"}.mdi-source-fork:before{content:"\F04C1"}.mdi-source-merge:before{content:"\F062D"}.mdi-source-pull:before{content:"\F04C2"}.mdi-source-repository:before{content:"\F0CCF"}.mdi-source-repository-multiple:before{content:"\F0CD0"}.mdi-soy-sauce:before{content:"\F07EE"}.mdi-soy-sauce-off:before{content:"\F13FC"}.mdi-spa:before{content:"\F0CD1"}.mdi-spa-outline:before{content:"\F0CD2"}.mdi-space-invaders:before{content:"\F0BC9"}.mdi-space-station:before{content:"\F1383"}.mdi-spade:before{content:"\F0E65"}.mdi-sparkles:before{content:"\F1545"}.mdi-speaker:before{content:"\F04C3"}.mdi-speaker-bluetooth:before{content:"\F09A2"}.mdi-speaker-multiple:before{content:"\F0D38"}.mdi-speaker-off:before{content:"\F04C4"}.mdi-speaker-wireless:before{content:"\F071F"}.mdi-speedometer:before{content:"\F04C5"}.mdi-speedometer-medium:before{content:"\F0F85"}.mdi-speedometer-slow:before{content:"\F0F86"}.mdi-spellcheck:before{content:"\F04C6"}.mdi-spider:before{content:"\F11EA"}.mdi-spider-thread:before{content:"\F11EB"}.mdi-spider-web:before{content:"\F0BCA"}.mdi-spirit-level:before{content:"\F14F1"}.mdi-spoon-sugar:before{content:"\F1429"}.mdi-spotify:before{content:"\F04C7"}.mdi-spotlight:before{content:"\F04C8"}.mdi-spotlight-beam:before{content:"\F04C9"}.mdi-spray:before{content:"\F0665"}.mdi-spray-bottle:before{content:"\F0AE0"}.mdi-sprinkler:before{content:"\F105F"}.mdi-sprinkler-variant:before{content:"\F1060"}.mdi-sprout:before{content:"\F0E66"}.mdi-sprout-outline:before{content:"\F0E67"}.mdi-square:before{content:"\F0764"}.mdi-square-circle:before{content:"\F1500"}.mdi-square-edit-outline:before{content:"\F090C"}.mdi-square-medium:before{content:"\F0A13"}.mdi-square-medium-outline:before{content:"\F0A14"}.mdi-square-off:before{content:"\F12EE"}.mdi-square-off-outline:before{content:"\F12EF"}.mdi-square-outline:before{content:"\F0763"}.mdi-square-root:before{content:"\F0784"}.mdi-square-root-box:before{content:"\F09A3"}.mdi-square-rounded:before{content:"\F14FB"}.mdi-square-rounded-outline:before{content:"\F14FC"}.mdi-square-small:before{content:"\F0A15"}.mdi-square-wave:before{content:"\F147B"}.mdi-squeegee:before{content:"\F0AE1"}.mdi-ssh:before{content:"\F08C0"}.mdi-stack-exchange:before{content:"\F060B"}.mdi-stack-overflow:before{content:"\F04CC"}.mdi-stackpath:before{content:"\F0359"}.mdi-stadium:before{content:"\F0FF9"}.mdi-stadium-variant:before{content:"\F0720"}.mdi-stairs:before{content:"\F04CD"}.mdi-stairs-box:before{content:"\F139E"}.mdi-stairs-down:before{content:"\F12BE"}.mdi-stairs-up:before{content:"\F12BD"}.mdi-stamper:before{content:"\F0D39"}.mdi-standard-definition:before{content:"\F07EF"}.mdi-star:before{content:"\F04CE"}.mdi-star-box:before{content:"\F0A73"}.mdi-star-box-multiple:before{content:"\F1286"}.mdi-star-box-multiple-outline:before{content:"\F1287"}.mdi-star-box-outline:before{content:"\F0A74"}.mdi-star-check:before{content:"\F1566"}.mdi-star-check-outline:before{content:"\F156A"}.mdi-star-circle:before{content:"\F04CF"}.mdi-star-circle-outline:before{content:"\F09A4"}.mdi-star-cog:before{content:"\F1668"}.mdi-star-cog-outline:before{content:"\F1669"}.mdi-star-face:before{content:"\F09A5"}.mdi-star-four-points:before{content:"\F0AE2"}.mdi-star-four-points-outline:before{content:"\F0AE3"}.mdi-star-half:before{content:"\F0246"}.mdi-star-half-full:before{content:"\F04D0"}.mdi-star-minus:before{content:"\F1564"}.mdi-star-minus-outline:before{content:"\F1568"}.mdi-star-off:before{content:"\F04D1"}.mdi-star-off-outline:before{content:"\F155B"}.mdi-star-outline:before{content:"\F04D2"}.mdi-star-plus:before{content:"\F1563"}.mdi-star-plus-outline:before{content:"\F1567"}.mdi-star-remove:before{content:"\F1565"}.mdi-star-remove-outline:before{content:"\F1569"}.mdi-star-settings:before{content:"\F166A"}.mdi-star-settings-outline:before{content:"\F166B"}.mdi-star-shooting:before{content:"\F1741"}.mdi-star-shooting-outline:before{content:"\F1742"}.mdi-star-three-points:before{content:"\F0AE4"}.mdi-star-three-points-outline:before{content:"\F0AE5"}.mdi-state-machine:before{content:"\F11EF"}.mdi-steam:before{content:"\F04D3"}.mdi-steering:before{content:"\F04D4"}.mdi-steering-off:before{content:"\F090E"}.mdi-step-backward:before{content:"\F04D5"}.mdi-step-backward-2:before{content:"\F04D6"}.mdi-step-forward:before{content:"\F04D7"}.mdi-step-forward-2:before{content:"\F04D8"}.mdi-stethoscope:before{content:"\F04D9"}.mdi-sticker:before{content:"\F1364"}.mdi-sticker-alert:before{content:"\F1365"}.mdi-sticker-alert-outline:before{content:"\F1366"}.mdi-sticker-check:before{content:"\F1367"}.mdi-sticker-check-outline:before{content:"\F1368"}.mdi-sticker-circle-outline:before{content:"\F05D0"}.mdi-sticker-emoji:before{content:"\F0785"}.mdi-sticker-minus:before{content:"\F1369"}.mdi-sticker-minus-outline:before{content:"\F136A"}.mdi-sticker-outline:before{content:"\F136B"}.mdi-sticker-plus:before{content:"\F136C"}.mdi-sticker-plus-outline:before{content:"\F136D"}.mdi-sticker-remove:before{content:"\F136E"}.mdi-sticker-remove-outline:before{content:"\F136F"}.mdi-stocking:before{content:"\F04DA"}.mdi-stomach:before{content:"\F1093"}.mdi-stop:before{content:"\F04DB"}.mdi-stop-circle:before{content:"\F0666"}.mdi-stop-circle-outline:before{content:"\F0667"}.mdi-store:before{content:"\F04DC"}.mdi-store-24-hour:before{content:"\F04DD"}.mdi-store-minus:before{content:"\F165E"}.mdi-store-outline:before{content:"\F1361"}.mdi-store-plus:before{content:"\F165F"}.mdi-store-remove:before{content:"\F1660"}.mdi-storefront:before{content:"\F07C7"}.mdi-storefront-outline:before{content:"\F10C1"}.mdi-stove:before{content:"\F04DE"}.mdi-strategy:before{content:"\F11D6"}.mdi-stretch-to-page:before{content:"\F0F2B"}.mdi-stretch-to-page-outline:before{content:"\F0F2C"}.mdi-string-lights:before{content:"\F12BA"}.mdi-string-lights-off:before{content:"\F12BB"}.mdi-subdirectory-arrow-left:before{content:"\F060C"}.mdi-subdirectory-arrow-right:before{content:"\F060D"}.mdi-submarine:before{content:"\F156C"}.mdi-subtitles:before{content:"\F0A16"}.mdi-subtitles-outline:before{content:"\F0A17"}.mdi-subway:before{content:"\F06AC"}.mdi-subway-alert-variant:before{content:"\F0D9D"}.mdi-subway-variant:before{content:"\F04DF"}.mdi-summit:before{content:"\F0786"}.mdi-sunglasses:before{content:"\F04E0"}.mdi-surround-sound:before{content:"\F05C5"}.mdi-surround-sound-2-0:before{content:"\F07F0"}.mdi-surround-sound-2-1:before{content:"\F1729"}.mdi-surround-sound-3-1:before{content:"\F07F1"}.mdi-surround-sound-5-1:before{content:"\F07F2"}.mdi-surround-sound-5-1-2:before{content:"\F172A"}.mdi-surround-sound-7-1:before{content:"\F07F3"}.mdi-svg:before{content:"\F0721"}.mdi-swap-horizontal:before{content:"\F04E1"}.mdi-swap-horizontal-bold:before{content:"\F0BCD"}.mdi-swap-horizontal-circle:before{content:"\F0FE1"}.mdi-swap-horizontal-circle-outline:before{content:"\F0FE2"}.mdi-swap-horizontal-variant:before{content:"\F08C1"}.mdi-swap-vertical:before{content:"\F04E2"}.mdi-swap-vertical-bold:before{content:"\F0BCE"}.mdi-swap-vertical-circle:before{content:"\F0FE3"}.mdi-swap-vertical-circle-outline:before{content:"\F0FE4"}.mdi-swap-vertical-variant:before{content:"\F08C2"}.mdi-swim:before{content:"\F04E3"}.mdi-switch:before{content:"\F04E4"}.mdi-sword:before{content:"\F04E5"}.mdi-sword-cross:before{content:"\F0787"}.mdi-syllabary-hangul:before{content:"\F1333"}.mdi-syllabary-hiragana:before{content:"\F1334"}.mdi-syllabary-katakana:before{content:"\F1335"}.mdi-syllabary-katakana-halfwidth:before{content:"\F1336"}.mdi-symbol:before{content:"\F1501"}.mdi-symfony:before{content:"\F0AE6"}.mdi-sync:before{content:"\F04E6"}.mdi-sync-alert:before{content:"\F04E7"}.mdi-sync-circle:before{content:"\F1378"}.mdi-sync-off:before{content:"\F04E8"}.mdi-tab:before{content:"\F04E9"}.mdi-tab-minus:before{content:"\F0B4B"}.mdi-tab-plus:before{content:"\F075C"}.mdi-tab-remove:before{content:"\F0B4C"}.mdi-tab-unselected:before{content:"\F04EA"}.mdi-table:before{content:"\F04EB"}.mdi-table-account:before{content:"\F13B9"}.mdi-table-alert:before{content:"\F13BA"}.mdi-table-arrow-down:before{content:"\F13BB"}.mdi-table-arrow-left:before{content:"\F13BC"}.mdi-table-arrow-right:before{content:"\F13BD"}.mdi-table-arrow-up:before{content:"\F13BE"}.mdi-table-border:before{content:"\F0A18"}.mdi-table-cancel:before{content:"\F13BF"}.mdi-table-chair:before{content:"\F1061"}.mdi-table-check:before{content:"\F13C0"}.mdi-table-clock:before{content:"\F13C1"}.mdi-table-cog:before{content:"\F13C2"}.mdi-table-column:before{content:"\F0835"}.mdi-table-column-plus-after:before{content:"\F04EC"}.mdi-table-column-plus-before:before{content:"\F04ED"}.mdi-table-column-remove:before{content:"\F04EE"}.mdi-table-column-width:before{content:"\F04EF"}.mdi-table-edit:before{content:"\F04F0"}.mdi-table-eye:before{content:"\F1094"}.mdi-table-eye-off:before{content:"\F13C3"}.mdi-table-furniture:before{content:"\F05BC"}.mdi-table-headers-eye:before{content:"\F121D"}.mdi-table-headers-eye-off:before{content:"\F121E"}.mdi-table-heart:before{content:"\F13C4"}.mdi-table-key:before{content:"\F13C5"}.mdi-table-large:before{content:"\F04F1"}.mdi-table-large-plus:before{content:"\F0F87"}.mdi-table-large-remove:before{content:"\F0F88"}.mdi-table-lock:before{content:"\F13C6"}.mdi-table-merge-cells:before{content:"\F09A6"}.mdi-table-minus:before{content:"\F13C7"}.mdi-table-multiple:before{content:"\F13C8"}.mdi-table-network:before{content:"\F13C9"}.mdi-table-of-contents:before{content:"\F0836"}.mdi-table-off:before{content:"\F13CA"}.mdi-table-picnic:before{content:"\F1743"}.mdi-table-plus:before{content:"\F0A75"}.mdi-table-refresh:before{content:"\F13A0"}.mdi-table-remove:before{content:"\F0A76"}.mdi-table-row:before{content:"\F0837"}.mdi-table-row-height:before{content:"\F04F2"}.mdi-table-row-plus-after:before{content:"\F04F3"}.mdi-table-row-plus-before:before{content:"\F04F4"}.mdi-table-row-remove:before{content:"\F04F5"}.mdi-table-search:before{content:"\F090F"}.mdi-table-settings:before{content:"\F0838"}.mdi-table-split-cell:before{content:"\F142A"}.mdi-table-star:before{content:"\F13CB"}.mdi-table-sync:before{content:"\F13A1"}.mdi-table-tennis:before{content:"\F0E68"}.mdi-tablet:before{content:"\F04F6"}.mdi-tablet-android:before{content:"\F04F7"}.mdi-tablet-cellphone:before{content:"\F09A7"}.mdi-tablet-dashboard:before{content:"\F0ECE"}.mdi-tablet-ipad:before{content:"\F04F8"}.mdi-taco:before{content:"\F0762"}.mdi-tag:before{content:"\F04F9"}.mdi-tag-arrow-down:before{content:"\F172B"}.mdi-tag-arrow-down-outline:before{content:"\F172C"}.mdi-tag-arrow-left:before{content:"\F172D"}.mdi-tag-arrow-left-outline:before{content:"\F172E"}.mdi-tag-arrow-right:before{content:"\F172F"}.mdi-tag-arrow-right-outline:before{content:"\F1730"}.mdi-tag-arrow-up:before{content:"\F1731"}.mdi-tag-arrow-up-outline:before{content:"\F1732"}.mdi-tag-faces:before{content:"\F04FA"}.mdi-tag-heart:before{content:"\F068B"}.mdi-tag-heart-outline:before{content:"\F0BCF"}.mdi-tag-minus:before{content:"\F0910"}.mdi-tag-minus-outline:before{content:"\F121F"}.mdi-tag-multiple:before{content:"\F04FB"}.mdi-tag-multiple-outline:before{content:"\F12F7"}.mdi-tag-off:before{content:"\F1220"}.mdi-tag-off-outline:before{content:"\F1221"}.mdi-tag-outline:before{content:"\F04FC"}.mdi-tag-plus:before{content:"\F0722"}.mdi-tag-plus-outline:before{content:"\F1222"}.mdi-tag-remove:before{content:"\F0723"}.mdi-tag-remove-outline:before{content:"\F1223"}.mdi-tag-text:before{content:"\F1224"}.mdi-tag-text-outline:before{content:"\F04FD"}.mdi-tailwind:before{content:"\F13FF"}.mdi-tank:before{content:"\F0D3A"}.mdi-tanker-truck:before{content:"\F0FE5"}.mdi-tape-drive:before{content:"\F16DF"}.mdi-tape-measure:before{content:"\F0B4D"}.mdi-target:before{content:"\F04FE"}.mdi-target-account:before{content:"\F0BD0"}.mdi-target-variant:before{content:"\F0A77"}.mdi-taxi:before{content:"\F04FF"}.mdi-tea:before{content:"\F0D9E"}.mdi-tea-outline:before{content:"\F0D9F"}.mdi-teach:before{content:"\F0890"}.mdi-teamviewer:before{content:"\F0500"}.mdi-telegram:before{content:"\F0501"}.mdi-telescope:before{content:"\F0B4E"}.mdi-television:before{content:"\F0502"}.mdi-television-ambient-light:before{content:"\F1356"}.mdi-television-box:before{content:"\F0839"}.mdi-television-classic:before{content:"\F07F4"}.mdi-television-classic-off:before{content:"\F083A"}.mdi-television-clean:before{content:"\F1110"}.mdi-television-guide:before{content:"\F0503"}.mdi-television-off:before{content:"\F083B"}.mdi-television-pause:before{content:"\F0F89"}.mdi-television-play:before{content:"\F0ECF"}.mdi-television-stop:before{content:"\F0F8A"}.mdi-temperature-celsius:before{content:"\F0504"}.mdi-temperature-fahrenheit:before{content:"\F0505"}.mdi-temperature-kelvin:before{content:"\F0506"}.mdi-tennis:before{content:"\F0DA0"}.mdi-tennis-ball:before{content:"\F0507"}.mdi-tent:before{content:"\F0508"}.mdi-terraform:before{content:"\F1062"}.mdi-terrain:before{content:"\F0509"}.mdi-test-tube:before{content:"\F0668"}.mdi-test-tube-empty:before{content:"\F0911"}.mdi-test-tube-off:before{content:"\F0912"}.mdi-text:before{content:"\F09A8"}.mdi-text-account:before{content:"\F1570"}.mdi-text-box:before{content:"\F021A"}.mdi-text-box-check:before{content:"\F0EA6"}.mdi-text-box-check-outline:before{content:"\F0EA7"}.mdi-text-box-minus:before{content:"\F0EA8"}.mdi-text-box-minus-outline:before{content:"\F0EA9"}.mdi-text-box-multiple:before{content:"\F0AB7"}.mdi-text-box-multiple-outline:before{content:"\F0AB8"}.mdi-text-box-outline:before{content:"\F09ED"}.mdi-text-box-plus:before{content:"\F0EAA"}.mdi-text-box-plus-outline:before{content:"\F0EAB"}.mdi-text-box-remove:before{content:"\F0EAC"}.mdi-text-box-remove-outline:before{content:"\F0EAD"}.mdi-text-box-search:before{content:"\F0EAE"}.mdi-text-box-search-outline:before{content:"\F0EAF"}.mdi-text-recognition:before{content:"\F113D"}.mdi-text-search:before{content:"\F13B8"}.mdi-text-shadow:before{content:"\F0669"}.mdi-text-short:before{content:"\F09A9"}.mdi-text-subject:before{content:"\F09AA"}.mdi-text-to-speech:before{content:"\F050A"}.mdi-text-to-speech-off:before{content:"\F050B"}.mdi-texture:before{content:"\F050C"}.mdi-texture-box:before{content:"\F0FE6"}.mdi-theater:before{content:"\F050D"}.mdi-theme-light-dark:before{content:"\F050E"}.mdi-thermometer:before{content:"\F050F"}.mdi-thermometer-alert:before{content:"\F0E01"}.mdi-thermometer-chevron-down:before{content:"\F0E02"}.mdi-thermometer-chevron-up:before{content:"\F0E03"}.mdi-thermometer-high:before{content:"\F10C2"}.mdi-thermometer-lines:before{content:"\F0510"}.mdi-thermometer-low:before{content:"\F10C3"}.mdi-thermometer-minus:before{content:"\F0E04"}.mdi-thermometer-off:before{content:"\F1531"}.mdi-thermometer-plus:before{content:"\F0E05"}.mdi-thermostat:before{content:"\F0393"}.mdi-thermostat-box:before{content:"\F0891"}.mdi-thought-bubble:before{content:"\F07F6"}.mdi-thought-bubble-outline:before{content:"\F07F7"}.mdi-thumb-down:before{content:"\F0511"}.mdi-thumb-down-outline:before{content:"\F0512"}.mdi-thumb-up:before{content:"\F0513"}.mdi-thumb-up-outline:before{content:"\F0514"}.mdi-thumbs-up-down:before{content:"\F0515"}.mdi-ticket:before{content:"\F0516"}.mdi-ticket-account:before{content:"\F0517"}.mdi-ticket-confirmation:before{content:"\F0518"}.mdi-ticket-confirmation-outline:before{content:"\F13AA"}.mdi-ticket-outline:before{content:"\F0913"}.mdi-ticket-percent:before{content:"\F0724"}.mdi-ticket-percent-outline:before{content:"\F142B"}.mdi-tie:before{content:"\F0519"}.mdi-tilde:before{content:"\F0725"}.mdi-timelapse:before{content:"\F051A"}.mdi-timeline:before{content:"\F0BD1"}.mdi-timeline-alert:before{content:"\F0F95"}.mdi-timeline-alert-outline:before{content:"\F0F98"}.mdi-timeline-check:before{content:"\F1532"}.mdi-timeline-check-outline:before{content:"\F1533"}.mdi-timeline-clock:before{content:"\F11FB"}.mdi-timeline-clock-outline:before{content:"\F11FC"}.mdi-timeline-help:before{content:"\F0F99"}.mdi-timeline-help-outline:before{content:"\F0F9A"}.mdi-timeline-minus:before{content:"\F1534"}.mdi-timeline-minus-outline:before{content:"\F1535"}.mdi-timeline-outline:before{content:"\F0BD2"}.mdi-timeline-plus:before{content:"\F0F96"}.mdi-timeline-plus-outline:before{content:"\F0F97"}.mdi-timeline-remove:before{content:"\F1536"}.mdi-timeline-remove-outline:before{content:"\F1537"}.mdi-timeline-text:before{content:"\F0BD3"}.mdi-timeline-text-outline:before{content:"\F0BD4"}.mdi-timer:before{content:"\F13AB"}.mdi-timer-10:before{content:"\F051C"}.mdi-timer-3:before{content:"\F051D"}.mdi-timer-off:before{content:"\F13AC"}.mdi-timer-off-outline:before{content:"\F051E"}.mdi-timer-outline:before{content:"\F051B"}.mdi-timer-sand:before{content:"\F051F"}.mdi-timer-sand-empty:before{content:"\F06AD"}.mdi-timer-sand-full:before{content:"\F078C"}.mdi-timetable:before{content:"\F0520"}.mdi-toaster:before{content:"\F1063"}.mdi-toaster-off:before{content:"\F11B7"}.mdi-toaster-oven:before{content:"\F0CD3"}.mdi-toggle-switch:before{content:"\F0521"}.mdi-toggle-switch-off:before{content:"\F0522"}.mdi-toggle-switch-off-outline:before{content:"\F0A19"}.mdi-toggle-switch-outline:before{content:"\F0A1A"}.mdi-toilet:before{content:"\F09AB"}.mdi-toolbox:before{content:"\F09AC"}.mdi-toolbox-outline:before{content:"\F09AD"}.mdi-tools:before{content:"\F1064"}.mdi-tooltip:before{content:"\F0523"}.mdi-tooltip-account:before{content:"\F000C"}.mdi-tooltip-check:before{content:"\F155C"}.mdi-tooltip-check-outline:before{content:"\F155D"}.mdi-tooltip-edit:before{content:"\F0524"}.mdi-tooltip-edit-outline:before{content:"\F12C5"}.mdi-tooltip-image:before{content:"\F0525"}.mdi-tooltip-image-outline:before{content:"\F0BD5"}.mdi-tooltip-minus:before{content:"\F155E"}.mdi-tooltip-minus-outline:before{content:"\F155F"}.mdi-tooltip-outline:before{content:"\F0526"}.mdi-tooltip-plus:before{content:"\F0BD6"}.mdi-tooltip-plus-outline:before{content:"\F0527"}.mdi-tooltip-remove:before{content:"\F1560"}.mdi-tooltip-remove-outline:before{content:"\F1561"}.mdi-tooltip-text:before{content:"\F0528"}.mdi-tooltip-text-outline:before{content:"\F0BD7"}.mdi-tooth:before{content:"\F08C3"}.mdi-tooth-outline:before{content:"\F0529"}.mdi-toothbrush:before{content:"\F1129"}.mdi-toothbrush-electric:before{content:"\F112C"}.mdi-toothbrush-paste:before{content:"\F112A"}.mdi-torch:before{content:"\F1606"}.mdi-tortoise:before{content:"\F0D3B"}.mdi-toslink:before{content:"\F12B8"}.mdi-tournament:before{content:"\F09AE"}.mdi-tow-truck:before{content:"\F083C"}.mdi-tower-beach:before{content:"\F0681"}.mdi-tower-fire:before{content:"\F0682"}.mdi-toy-brick:before{content:"\F1288"}.mdi-toy-brick-marker:before{content:"\F1289"}.mdi-toy-brick-marker-outline:before{content:"\F128A"}.mdi-toy-brick-minus:before{content:"\F128B"}.mdi-toy-brick-minus-outline:before{content:"\F128C"}.mdi-toy-brick-outline:before{content:"\F128D"}.mdi-toy-brick-plus:before{content:"\F128E"}.mdi-toy-brick-plus-outline:before{content:"\F128F"}.mdi-toy-brick-remove:before{content:"\F1290"}.mdi-toy-brick-remove-outline:before{content:"\F1291"}.mdi-toy-brick-search:before{content:"\F1292"}.mdi-toy-brick-search-outline:before{content:"\F1293"}.mdi-track-light:before{content:"\F0914"}.mdi-trackpad:before{content:"\F07F8"}.mdi-trackpad-lock:before{content:"\F0933"}.mdi-tractor:before{content:"\F0892"}.mdi-tractor-variant:before{content:"\F14C4"}.mdi-trademark:before{content:"\F0A78"}.mdi-traffic-cone:before{content:"\F137C"}.mdi-traffic-light:before{content:"\F052B"}.mdi-train:before{content:"\F052C"}.mdi-train-car:before{content:"\F0BD8"}.mdi-train-car-passenger:before{content:"\F1733"}.mdi-train-car-passenger-door:before{content:"\F1734"}.mdi-train-car-passenger-door-open:before{content:"\F1735"}.mdi-train-car-passenger-variant:before{content:"\F1736"}.mdi-train-variant:before{content:"\F08C4"}.mdi-tram:before{content:"\F052D"}.mdi-tram-side:before{content:"\F0FE7"}.mdi-transcribe:before{content:"\F052E"}.mdi-transcribe-close:before{content:"\F052F"}.mdi-transfer:before{content:"\F1065"}.mdi-transfer-down:before{content:"\F0DA1"}.mdi-transfer-left:before{content:"\F0DA2"}.mdi-transfer-right:before{content:"\F0530"}.mdi-transfer-up:before{content:"\F0DA3"}.mdi-transit-connection:before{content:"\F0D3C"}.mdi-transit-connection-horizontal:before{content:"\F1546"}.mdi-transit-connection-variant:before{content:"\F0D3D"}.mdi-transit-detour:before{content:"\F0F8B"}.mdi-transit-skip:before{content:"\F1515"}.mdi-transit-transfer:before{content:"\F06AE"}.mdi-transition:before{content:"\F0915"}.mdi-transition-masked:before{content:"\F0916"}.mdi-translate:before{content:"\F05CA"}.mdi-translate-off:before{content:"\F0E06"}.mdi-transmission-tower:before{content:"\F0D3E"}.mdi-trash-can:before{content:"\F0A79"}.mdi-trash-can-outline:before{content:"\F0A7A"}.mdi-tray:before{content:"\F1294"}.mdi-tray-alert:before{content:"\F1295"}.mdi-tray-full:before{content:"\F1296"}.mdi-tray-minus:before{content:"\F1297"}.mdi-tray-plus:before{content:"\F1298"}.mdi-tray-remove:before{content:"\F1299"}.mdi-treasure-chest:before{content:"\F0726"}.mdi-tree:before{content:"\F0531"}.mdi-tree-outline:before{content:"\F0E69"}.mdi-trello:before{content:"\F0532"}.mdi-trending-down:before{content:"\F0533"}.mdi-trending-neutral:before{content:"\F0534"}.mdi-trending-up:before{content:"\F0535"}.mdi-triangle:before{content:"\F0536"}.mdi-triangle-outline:before{content:"\F0537"}.mdi-triangle-wave:before{content:"\F147C"}.mdi-triforce:before{content:"\F0BD9"}.mdi-trophy:before{content:"\F0538"}.mdi-trophy-award:before{content:"\F0539"}.mdi-trophy-broken:before{content:"\F0DA4"}.mdi-trophy-outline:before{content:"\F053A"}.mdi-trophy-variant:before{content:"\F053B"}.mdi-trophy-variant-outline:before{content:"\F053C"}.mdi-truck:before{content:"\F053D"}.mdi-truck-check:before{content:"\F0CD4"}.mdi-truck-check-outline:before{content:"\F129A"}.mdi-truck-delivery:before{content:"\F053E"}.mdi-truck-delivery-outline:before{content:"\F129B"}.mdi-truck-fast:before{content:"\F0788"}.mdi-truck-fast-outline:before{content:"\F129C"}.mdi-truck-outline:before{content:"\F129D"}.mdi-truck-trailer:before{content:"\F0727"}.mdi-trumpet:before{content:"\F1096"}.mdi-tshirt-crew:before{content:"\F0A7B"}.mdi-tshirt-crew-outline:before{content:"\F053F"}.mdi-tshirt-v:before{content:"\F0A7C"}.mdi-tshirt-v-outline:before{content:"\F0540"}.mdi-tumble-dryer:before{content:"\F0917"}.mdi-tumble-dryer-alert:before{content:"\F11BA"}.mdi-tumble-dryer-off:before{content:"\F11BB"}.mdi-tune:before{content:"\F062E"}.mdi-tune-variant:before{content:"\F1542"}.mdi-tune-vertical:before{content:"\F066A"}.mdi-tune-vertical-variant:before{content:"\F1543"}.mdi-turkey:before{content:"\F171B"}.mdi-turnstile:before{content:"\F0CD5"}.mdi-turnstile-outline:before{content:"\F0CD6"}.mdi-turtle:before{content:"\F0CD7"}.mdi-twitch:before{content:"\F0543"}.mdi-twitter:before{content:"\F0544"}.mdi-twitter-retweet:before{content:"\F0547"}.mdi-two-factor-authentication:before{content:"\F09AF"}.mdi-typewriter:before{content:"\F0F2D"}.mdi-ubisoft:before{content:"\F0BDA"}.mdi-ubuntu:before{content:"\F0548"}.mdi-ufo:before{content:"\F10C4"}.mdi-ufo-outline:before{content:"\F10C5"}.mdi-ultra-high-definition:before{content:"\F07F9"}.mdi-umbraco:before{content:"\F0549"}.mdi-umbrella:before{content:"\F054A"}.mdi-umbrella-closed:before{content:"\F09B0"}.mdi-umbrella-closed-outline:before{content:"\F13E2"}.mdi-umbrella-closed-variant:before{content:"\F13E1"}.mdi-umbrella-outline:before{content:"\F054B"}.mdi-undo:before{content:"\F054C"}.mdi-undo-variant:before{content:"\F054D"}.mdi-unfold-less-horizontal:before{content:"\F054E"}.mdi-unfold-less-vertical:before{content:"\F0760"}.mdi-unfold-more-horizontal:before{content:"\F054F"}.mdi-unfold-more-vertical:before{content:"\F0761"}.mdi-ungroup:before{content:"\F0550"}.mdi-unicode:before{content:"\F0ED0"}.mdi-unicorn:before{content:"\F15C2"}.mdi-unicorn-variant:before{content:"\F15C3"}.mdi-unicycle:before{content:"\F15E5"}.mdi-unity:before{content:"\F06AF"}.mdi-unreal:before{content:"\F09B1"}.mdi-untappd:before{content:"\F0551"}.mdi-update:before{content:"\F06B0"}.mdi-upload:before{content:"\F0552"}.mdi-upload-lock:before{content:"\F1373"}.mdi-upload-lock-outline:before{content:"\F1374"}.mdi-upload-multiple:before{content:"\F083D"}.mdi-upload-network:before{content:"\F06F6"}.mdi-upload-network-outline:before{content:"\F0CD8"}.mdi-upload-off:before{content:"\F10C6"}.mdi-upload-off-outline:before{content:"\F10C7"}.mdi-upload-outline:before{content:"\F0E07"}.mdi-usb:before{content:"\F0553"}.mdi-usb-flash-drive:before{content:"\F129E"}.mdi-usb-flash-drive-outline:before{content:"\F129F"}.mdi-usb-port:before{content:"\F11F0"}.mdi-valve:before{content:"\F1066"}.mdi-valve-closed:before{content:"\F1067"}.mdi-valve-open:before{content:"\F1068"}.mdi-van-passenger:before{content:"\F07FA"}.mdi-van-utility:before{content:"\F07FB"}.mdi-vanish:before{content:"\F07FC"}.mdi-vanish-quarter:before{content:"\F1554"}.mdi-vanity-light:before{content:"\F11E1"}.mdi-variable:before{content:"\F0AE7"}.mdi-variable-box:before{content:"\F1111"}.mdi-vector-arrange-above:before{content:"\F0554"}.mdi-vector-arrange-below:before{content:"\F0555"}.mdi-vector-bezier:before{content:"\F0AE8"}.mdi-vector-circle:before{content:"\F0556"}.mdi-vector-circle-variant:before{content:"\F0557"}.mdi-vector-combine:before{content:"\F0558"}.mdi-vector-curve:before{content:"\F0559"}.mdi-vector-difference:before{content:"\F055A"}.mdi-vector-difference-ab:before{content:"\F055B"}.mdi-vector-difference-ba:before{content:"\F055C"}.mdi-vector-ellipse:before{content:"\F0893"}.mdi-vector-intersection:before{content:"\F055D"}.mdi-vector-line:before{content:"\F055E"}.mdi-vector-link:before{content:"\F0FE8"}.mdi-vector-point:before{content:"\F055F"}.mdi-vector-polygon:before{content:"\F0560"}.mdi-vector-polyline:before{content:"\F0561"}.mdi-vector-polyline-edit:before{content:"\F1225"}.mdi-vector-polyline-minus:before{content:"\F1226"}.mdi-vector-polyline-plus:before{content:"\F1227"}.mdi-vector-polyline-remove:before{content:"\F1228"}.mdi-vector-radius:before{content:"\F074A"}.mdi-vector-rectangle:before{content:"\F05C6"}.mdi-vector-selection:before{content:"\F0562"}.mdi-vector-square:before{content:"\F0001"}.mdi-vector-triangle:before{content:"\F0563"}.mdi-vector-union:before{content:"\F0564"}.mdi-vhs:before{content:"\F0A1B"}.mdi-vibrate:before{content:"\F0566"}.mdi-vibrate-off:before{content:"\F0CD9"}.mdi-video:before{content:"\F0567"}.mdi-video-3d:before{content:"\F07FD"}.mdi-video-3d-off:before{content:"\F13D9"}.mdi-video-3d-variant:before{content:"\F0ED1"}.mdi-video-4k-box:before{content:"\F083E"}.mdi-video-account:before{content:"\F0919"}.mdi-video-box:before{content:"\F00FD"}.mdi-video-box-off:before{content:"\F00FE"}.mdi-video-check:before{content:"\F1069"}.mdi-video-check-outline:before{content:"\F106A"}.mdi-video-high-definition:before{content:"\F152E"}.mdi-video-image:before{content:"\F091A"}.mdi-video-input-antenna:before{content:"\F083F"}.mdi-video-input-component:before{content:"\F0840"}.mdi-video-input-hdmi:before{content:"\F0841"}.mdi-video-input-scart:before{content:"\F0F8C"}.mdi-video-input-svideo:before{content:"\F0842"}.mdi-video-minus:before{content:"\F09B2"}.mdi-video-minus-outline:before{content:"\F02BA"}.mdi-video-off:before{content:"\F0568"}.mdi-video-off-outline:before{content:"\F0BDB"}.mdi-video-outline:before{content:"\F0BDC"}.mdi-video-plus:before{content:"\F09B3"}.mdi-video-plus-outline:before{content:"\F01D3"}.mdi-video-stabilization:before{content:"\F091B"}.mdi-video-switch:before{content:"\F0569"}.mdi-video-switch-outline:before{content:"\F0790"}.mdi-video-vintage:before{content:"\F0A1C"}.mdi-video-wireless:before{content:"\F0ED2"}.mdi-video-wireless-outline:before{content:"\F0ED3"}.mdi-view-agenda:before{content:"\F056A"}.mdi-view-agenda-outline:before{content:"\F11D8"}.mdi-view-array:before{content:"\F056B"}.mdi-view-array-outline:before{content:"\F1485"}.mdi-view-carousel:before{content:"\F056C"}.mdi-view-carousel-outline:before{content:"\F1486"}.mdi-view-column:before{content:"\F056D"}.mdi-view-column-outline:before{content:"\F1487"}.mdi-view-comfy:before{content:"\F0E6A"}.mdi-view-comfy-outline:before{content:"\F1488"}.mdi-view-compact:before{content:"\F0E6B"}.mdi-view-compact-outline:before{content:"\F0E6C"}.mdi-view-dashboard:before{content:"\F056E"}.mdi-view-dashboard-outline:before{content:"\F0A1D"}.mdi-view-dashboard-variant:before{content:"\F0843"}.mdi-view-dashboard-variant-outline:before{content:"\F1489"}.mdi-view-day:before{content:"\F056F"}.mdi-view-day-outline:before{content:"\F148A"}.mdi-view-grid:before{content:"\F0570"}.mdi-view-grid-outline:before{content:"\F11D9"}.mdi-view-grid-plus:before{content:"\F0F8D"}.mdi-view-grid-plus-outline:before{content:"\F11DA"}.mdi-view-headline:before{content:"\F0571"}.mdi-view-list:before{content:"\F0572"}.mdi-view-list-outline:before{content:"\F148B"}.mdi-view-module:before{content:"\F0573"}.mdi-view-module-outline:before{content:"\F148C"}.mdi-view-parallel:before{content:"\F0728"}.mdi-view-parallel-outline:before{content:"\F148D"}.mdi-view-quilt:before{content:"\F0574"}.mdi-view-quilt-outline:before{content:"\F148E"}.mdi-view-sequential:before{content:"\F0729"}.mdi-view-sequential-outline:before{content:"\F148F"}.mdi-view-split-horizontal:before{content:"\F0BCB"}.mdi-view-split-vertical:before{content:"\F0BCC"}.mdi-view-stream:before{content:"\F0575"}.mdi-view-stream-outline:before{content:"\F1490"}.mdi-view-week:before{content:"\F0576"}.mdi-view-week-outline:before{content:"\F1491"}.mdi-vimeo:before{content:"\F0577"}.mdi-violin:before{content:"\F060F"}.mdi-virtual-reality:before{content:"\F0894"}.mdi-virus:before{content:"\F13B6"}.mdi-virus-outline:before{content:"\F13B7"}.mdi-vk:before{content:"\F0579"}.mdi-vlc:before{content:"\F057C"}.mdi-voice-off:before{content:"\F0ED4"}.mdi-voicemail:before{content:"\F057D"}.mdi-volleyball:before{content:"\F09B4"}.mdi-volume-high:before{content:"\F057E"}.mdi-volume-low:before{content:"\F057F"}.mdi-volume-medium:before{content:"\F0580"}.mdi-volume-minus:before{content:"\F075E"}.mdi-volume-mute:before{content:"\F075F"}.mdi-volume-off:before{content:"\F0581"}.mdi-volume-plus:before{content:"\F075D"}.mdi-volume-source:before{content:"\F1120"}.mdi-volume-variant-off:before{content:"\F0E08"}.mdi-volume-vibrate:before{content:"\F1121"}.mdi-vote:before{content:"\F0A1F"}.mdi-vote-outline:before{content:"\F0A20"}.mdi-vpn:before{content:"\F0582"}.mdi-vuejs:before{content:"\F0844"}.mdi-vuetify:before{content:"\F0E6D"}.mdi-walk:before{content:"\F0583"}.mdi-wall:before{content:"\F07FE"}.mdi-wall-sconce:before{content:"\F091C"}.mdi-wall-sconce-flat:before{content:"\F091D"}.mdi-wall-sconce-flat-variant:before{content:"\F041C"}.mdi-wall-sconce-round:before{content:"\F0748"}.mdi-wall-sconce-round-variant:before{content:"\F091E"}.mdi-wallet:before{content:"\F0584"}.mdi-wallet-giftcard:before{content:"\F0585"}.mdi-wallet-membership:before{content:"\F0586"}.mdi-wallet-outline:before{content:"\F0BDD"}.mdi-wallet-plus:before{content:"\F0F8E"}.mdi-wallet-plus-outline:before{content:"\F0F8F"}.mdi-wallet-travel:before{content:"\F0587"}.mdi-wallpaper:before{content:"\F0E09"}.mdi-wan:before{content:"\F0588"}.mdi-wardrobe:before{content:"\F0F90"}.mdi-wardrobe-outline:before{content:"\F0F91"}.mdi-warehouse:before{content:"\F0F81"}.mdi-washing-machine:before{content:"\F072A"}.mdi-washing-machine-alert:before{content:"\F11BC"}.mdi-washing-machine-off:before{content:"\F11BD"}.mdi-watch:before{content:"\F0589"}.mdi-watch-export:before{content:"\F058A"}.mdi-watch-export-variant:before{content:"\F0895"}.mdi-watch-import:before{content:"\F058B"}.mdi-watch-import-variant:before{content:"\F0896"}.mdi-watch-variant:before{content:"\F0897"}.mdi-watch-vibrate:before{content:"\F06B1"}.mdi-watch-vibrate-off:before{content:"\F0CDA"}.mdi-water:before{content:"\F058C"}.mdi-water-alert:before{content:"\F1502"}.mdi-water-alert-outline:before{content:"\F1503"}.mdi-water-boiler:before{content:"\F0F92"}.mdi-water-boiler-alert:before{content:"\F11B3"}.mdi-water-boiler-off:before{content:"\F11B4"}.mdi-water-check:before{content:"\F1504"}.mdi-water-check-outline:before{content:"\F1505"}.mdi-water-minus:before{content:"\F1506"}.mdi-water-minus-outline:before{content:"\F1507"}.mdi-water-off:before{content:"\F058D"}.mdi-water-off-outline:before{content:"\F1508"}.mdi-water-outline:before{content:"\F0E0A"}.mdi-water-percent:before{content:"\F058E"}.mdi-water-percent-alert:before{content:"\F1509"}.mdi-water-plus:before{content:"\F150A"}.mdi-water-plus-outline:before{content:"\F150B"}.mdi-water-polo:before{content:"\F12A0"}.mdi-water-pump:before{content:"\F058F"}.mdi-water-pump-off:before{content:"\F0F93"}.mdi-water-remove:before{content:"\F150C"}.mdi-water-remove-outline:before{content:"\F150D"}.mdi-water-well:before{content:"\F106B"}.mdi-water-well-outline:before{content:"\F106C"}.mdi-watering-can:before{content:"\F1481"}.mdi-watering-can-outline:before{content:"\F1482"}.mdi-watermark:before{content:"\F0612"}.mdi-wave:before{content:"\F0F2E"}.mdi-waveform:before{content:"\F147D"}.mdi-waves:before{content:"\F078D"}.mdi-waze:before{content:"\F0BDE"}.mdi-weather-cloudy:before{content:"\F0590"}.mdi-weather-cloudy-alert:before{content:"\F0F2F"}.mdi-weather-cloudy-arrow-right:before{content:"\F0E6E"}.mdi-weather-fog:before{content:"\F0591"}.mdi-weather-hail:before{content:"\F0592"}.mdi-weather-hazy:before{content:"\F0F30"}.mdi-weather-hurricane:before{content:"\F0898"}.mdi-weather-lightning:before{content:"\F0593"}.mdi-weather-lightning-rainy:before{content:"\F067E"}.mdi-weather-night:before{content:"\F0594"}.mdi-weather-night-partly-cloudy:before{content:"\F0F31"}.mdi-weather-partly-cloudy:before{content:"\F0595"}.mdi-weather-partly-lightning:before{content:"\F0F32"}.mdi-weather-partly-rainy:before{content:"\F0F33"}.mdi-weather-partly-snowy:before{content:"\F0F34"}.mdi-weather-partly-snowy-rainy:before{content:"\F0F35"}.mdi-weather-pouring:before{content:"\F0596"}.mdi-weather-rainy:before{content:"\F0597"}.mdi-weather-snowy:before{content:"\F0598"}.mdi-weather-snowy-heavy:before{content:"\F0F36"}.mdi-weather-snowy-rainy:before{content:"\F067F"}.mdi-weather-sunny:before{content:"\F0599"}.mdi-weather-sunny-alert:before{content:"\F0F37"}.mdi-weather-sunny-off:before{content:"\F14E4"}.mdi-weather-sunset:before{content:"\F059A"}.mdi-weather-sunset-down:before{content:"\F059B"}.mdi-weather-sunset-up:before{content:"\F059C"}.mdi-weather-tornado:before{content:"\F0F38"}.mdi-weather-windy:before{content:"\F059D"}.mdi-weather-windy-variant:before{content:"\F059E"}.mdi-web:before{content:"\F059F"}.mdi-web-box:before{content:"\F0F94"}.mdi-web-clock:before{content:"\F124A"}.mdi-webcam:before{content:"\F05A0"}.mdi-webcam-off:before{content:"\F1737"}.mdi-webhook:before{content:"\F062F"}.mdi-webpack:before{content:"\F072B"}.mdi-webrtc:before{content:"\F1248"}.mdi-wechat:before{content:"\F0611"}.mdi-weight:before{content:"\F05A1"}.mdi-weight-gram:before{content:"\F0D3F"}.mdi-weight-kilogram:before{content:"\F05A2"}.mdi-weight-lifter:before{content:"\F115D"}.mdi-weight-pound:before{content:"\F09B5"}.mdi-whatsapp:before{content:"\F05A3"}.mdi-wheel-barrow:before{content:"\F14F2"}.mdi-wheelchair-accessibility:before{content:"\F05A4"}.mdi-whistle:before{content:"\F09B6"}.mdi-whistle-outline:before{content:"\F12BC"}.mdi-white-balance-auto:before{content:"\F05A5"}.mdi-white-balance-incandescent:before{content:"\F05A6"}.mdi-white-balance-iridescent:before{content:"\F05A7"}.mdi-white-balance-sunny:before{content:"\F05A8"}.mdi-widgets:before{content:"\F072C"}.mdi-widgets-outline:before{content:"\F1355"}.mdi-wifi:before{content:"\F05A9"}.mdi-wifi-alert:before{content:"\F16B5"}.mdi-wifi-arrow-down:before{content:"\F16B6"}.mdi-wifi-arrow-left:before{content:"\F16B7"}.mdi-wifi-arrow-left-right:before{content:"\F16B8"}.mdi-wifi-arrow-right:before{content:"\F16B9"}.mdi-wifi-arrow-up:before{content:"\F16BA"}.mdi-wifi-arrow-up-down:before{content:"\F16BB"}.mdi-wifi-cancel:before{content:"\F16BC"}.mdi-wifi-check:before{content:"\F16BD"}.mdi-wifi-cog:before{content:"\F16BE"}.mdi-wifi-lock:before{content:"\F16BF"}.mdi-wifi-lock-open:before{content:"\F16C0"}.mdi-wifi-marker:before{content:"\F16C1"}.mdi-wifi-minus:before{content:"\F16C2"}.mdi-wifi-off:before{content:"\F05AA"}.mdi-wifi-plus:before{content:"\F16C3"}.mdi-wifi-refresh:before{content:"\F16C4"}.mdi-wifi-remove:before{content:"\F16C5"}.mdi-wifi-settings:before{content:"\F16C6"}.mdi-wifi-star:before{content:"\F0E0B"}.mdi-wifi-strength-1:before{content:"\F091F"}.mdi-wifi-strength-1-alert:before{content:"\F0920"}.mdi-wifi-strength-1-lock:before{content:"\F0921"}.mdi-wifi-strength-1-lock-open:before{content:"\F16CB"}.mdi-wifi-strength-2:before{content:"\F0922"}.mdi-wifi-strength-2-alert:before{content:"\F0923"}.mdi-wifi-strength-2-lock:before{content:"\F0924"}.mdi-wifi-strength-2-lock-open:before{content:"\F16CC"}.mdi-wifi-strength-3:before{content:"\F0925"}.mdi-wifi-strength-3-alert:before{content:"\F0926"}.mdi-wifi-strength-3-lock:before{content:"\F0927"}.mdi-wifi-strength-3-lock-open:before{content:"\F16CD"}.mdi-wifi-strength-4:before{content:"\F0928"}.mdi-wifi-strength-4-alert:before{content:"\F0929"}.mdi-wifi-strength-4-lock:before{content:"\F092A"}.mdi-wifi-strength-4-lock-open:before{content:"\F16CE"}.mdi-wifi-strength-alert-outline:before{content:"\F092B"}.mdi-wifi-strength-lock-open-outline:before{content:"\F16CF"}.mdi-wifi-strength-lock-outline:before{content:"\F092C"}.mdi-wifi-strength-off:before{content:"\F092D"}.mdi-wifi-strength-off-outline:before{content:"\F092E"}.mdi-wifi-strength-outline:before{content:"\F092F"}.mdi-wifi-sync:before{content:"\F16C7"}.mdi-wikipedia:before{content:"\F05AC"}.mdi-wind-turbine:before{content:"\F0DA5"}.mdi-window-close:before{content:"\F05AD"}.mdi-window-closed:before{content:"\F05AE"}.mdi-window-closed-variant:before{content:"\F11DB"}.mdi-window-maximize:before{content:"\F05AF"}.mdi-window-minimize:before{content:"\F05B0"}.mdi-window-open:before{content:"\F05B1"}.mdi-window-open-variant:before{content:"\F11DC"}.mdi-window-restore:before{content:"\F05B2"}.mdi-window-shutter:before{content:"\F111C"}.mdi-window-shutter-alert:before{content:"\F111D"}.mdi-window-shutter-open:before{content:"\F111E"}.mdi-windsock:before{content:"\F15FA"}.mdi-wiper:before{content:"\F0AE9"}.mdi-wiper-wash:before{content:"\F0DA6"}.mdi-wizard-hat:before{content:"\F1477"}.mdi-wordpress:before{content:"\F05B4"}.mdi-wrap:before{content:"\F05B6"}.mdi-wrap-disabled:before{content:"\F0BDF"}.mdi-wrench:before{content:"\F05B7"}.mdi-wrench-outline:before{content:"\F0BE0"}.mdi-xamarin:before{content:"\F0845"}.mdi-xamarin-outline:before{content:"\F0846"}.mdi-xing:before{content:"\F05BE"}.mdi-xml:before{content:"\F05C0"}.mdi-xmpp:before{content:"\F07FF"}.mdi-y-combinator:before{content:"\F0624"}.mdi-yahoo:before{content:"\F0B4F"}.mdi-yeast:before{content:"\F05C1"}.mdi-yin-yang:before{content:"\F0680"}.mdi-yoga:before{content:"\F117C"}.mdi-youtube:before{content:"\F05C3"}.mdi-youtube-gaming:before{content:"\F0848"}.mdi-youtube-studio:before{content:"\F0847"}.mdi-youtube-subscription:before{content:"\F0D40"}.mdi-youtube-tv:before{content:"\F0448"}.mdi-yurt:before{content:"\F1516"}.mdi-z-wave:before{content:"\F0AEA"}.mdi-zend:before{content:"\F0AEB"}.mdi-zigbee:before{content:"\F0D41"}.mdi-zip-box:before{content:"\F05C4"}.mdi-zip-box-outline:before{content:"\F0FFA"}.mdi-zip-disk:before{content:"\F0A23"}.mdi-zodiac-aquarius:before{content:"\F0A7D"}.mdi-zodiac-aries:before{content:"\F0A7E"}.mdi-zodiac-cancer:before{content:"\F0A7F"}.mdi-zodiac-capricorn:before{content:"\F0A80"}.mdi-zodiac-gemini:before{content:"\F0A81"}.mdi-zodiac-leo:before{content:"\F0A82"}.mdi-zodiac-libra:before{content:"\F0A83"}.mdi-zodiac-pisces:before{content:"\F0A84"}.mdi-zodiac-sagittarius:before{content:"\F0A85"}.mdi-zodiac-scorpio:before{content:"\F0A86"}.mdi-zodiac-taurus:before{content:"\F0A87"}.mdi-zodiac-virgo:before{content:"\F0A88"}.mdi-blank:before{content:"\F68C";visibility:hidden}.mdi-18px.mdi-set,.mdi-18px.mdi:before{font-size:18px}.mdi-24px.mdi-set,.mdi-24px.mdi:before{font-size:24px}.mdi-36px.mdi-set,.mdi-36px.mdi:before{font-size:36px}.mdi-48px.mdi-set,.mdi-48px.mdi:before{font-size:48px}.mdi-dark:before{color:rgba(0,0,0,.54)}.mdi-dark.mdi-inactive:before{color:rgba(0,0,0,.26)}.mdi-light:before{color:#fff}.mdi-light.mdi-inactive:before{color:hsla(0,0%,100%,.3)}.mdi-rotate-45:before{transform:rotate(45deg)}.mdi-rotate-90:before{transform:rotate(90deg)}.mdi-rotate-135:before{transform:rotate(135deg)}.mdi-rotate-180:before{transform:rotate(180deg)}.mdi-rotate-225:before{transform:rotate(225deg)}.mdi-rotate-270:before{transform:rotate(270deg)}.mdi-rotate-315:before{transform:rotate(315deg)}.mdi-flip-h:before{transform:scaleX(-1);filter:FlipH;-ms-filter:"FlipH"}.mdi-flip-v:before{transform:scaleY(-1);filter:FlipV;-ms-filter:"FlipV"}.mdi-spin:before{animation:mdi-spin 2s linear infinite}@keyframes mdi-spin{0%{transform:rotate(0deg)}to{transform:rotate(359deg)}}.container{width:100%;padding:12px;margin-right:auto;margin-left:auto}@media(min-width:960px){.container{max-width:900px}}@media(min-width:1264px){.container{max-width:1185px}}@media(min-width:1904px){.container{max-width:1785px}}.container--fluid{max-width:100%}.row{display:flex;flex-wrap:wrap;flex:1 1 auto;margin:-12px}.row+.row{margin-top:12px}.row+.row--dense{margin-top:4px}.row--dense{margin:-4px}.row--dense>.col,.row--dense>[class*=col-]{padding:4px}.row.no-gutters{margin:0}.row.no-gutters>.col,.row.no-gutters>[class*=col-]{padding:0}.col,.col-1,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-10,.col-11,.col-12,.col-auto,.col-lg,.col-lg-1,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-auto,.col-md,.col-md-1,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-10,.col-md-11,.col-md-12,.col-md-auto,.col-sm,.col-sm-1,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-auto,.col-xl,.col-xl-1,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl-auto{width:100%;padding:12px}.col{flex-basis:0;flex-grow:1;max-width:100%}.col-auto{flex:0 0 auto;width:auto;max-width:100%}.col-1{flex:0 0 8.3333333333%;max-width:8.3333333333%}.col-2{flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-3{flex:0 0 25%;max-width:25%}.col-4{flex:0 0 33.3333333333%;max-width:33.3333333333%}.col-5{flex:0 0 41.6666666667%;max-width:41.6666666667%}.col-6{flex:0 0 50%;max-width:50%}.col-7{flex:0 0 58.3333333333%;max-width:58.3333333333%}.col-8{flex:0 0 66.6666666667%;max-width:66.6666666667%}.col-9{flex:0 0 75%;max-width:75%}.col-10{flex:0 0 83.3333333333%;max-width:83.3333333333%}.col-11{flex:0 0 91.6666666667%;max-width:91.6666666667%}.col-12{flex:0 0 100%;max-width:100%}.v-application--is-ltr .offset-1{margin-left:8.3333333333%}.v-application--is-rtl .offset-1{margin-right:8.3333333333%}.v-application--is-ltr .offset-2{margin-left:16.6666666667%}.v-application--is-rtl .offset-2{margin-right:16.6666666667%}.v-application--is-ltr .offset-3{margin-left:25%}.v-application--is-rtl .offset-3{margin-right:25%}.v-application--is-ltr .offset-4{margin-left:33.3333333333%}.v-application--is-rtl .offset-4{margin-right:33.3333333333%}.v-application--is-ltr .offset-5{margin-left:41.6666666667%}.v-application--is-rtl .offset-5{margin-right:41.6666666667%}.v-application--is-ltr .offset-6{margin-left:50%}.v-application--is-rtl .offset-6{margin-right:50%}.v-application--is-ltr .offset-7{margin-left:58.3333333333%}.v-application--is-rtl .offset-7{margin-right:58.3333333333%}.v-application--is-ltr .offset-8{margin-left:66.6666666667%}.v-application--is-rtl .offset-8{margin-right:66.6666666667%}.v-application--is-ltr .offset-9{margin-left:75%}.v-application--is-rtl .offset-9{margin-right:75%}.v-application--is-ltr .offset-10{margin-left:83.3333333333%}.v-application--is-rtl .offset-10{margin-right:83.3333333333%}.v-application--is-ltr .offset-11{margin-left:91.6666666667%}.v-application--is-rtl .offset-11{margin-right:91.6666666667%}@media(min-width:600px){.col-sm{flex-basis:0;flex-grow:1;max-width:100%}.col-sm-auto{flex:0 0 auto;width:auto;max-width:100%}.col-sm-1{flex:0 0 8.3333333333%;max-width:8.3333333333%}.col-sm-2{flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-sm-3{flex:0 0 25%;max-width:25%}.col-sm-4{flex:0 0 33.3333333333%;max-width:33.3333333333%}.col-sm-5{flex:0 0 41.6666666667%;max-width:41.6666666667%}.col-sm-6{flex:0 0 50%;max-width:50%}.col-sm-7{flex:0 0 58.3333333333%;max-width:58.3333333333%}.col-sm-8{flex:0 0 66.6666666667%;max-width:66.6666666667%}.col-sm-9{flex:0 0 75%;max-width:75%}.col-sm-10{flex:0 0 83.3333333333%;max-width:83.3333333333%}.col-sm-11{flex:0 0 91.6666666667%;max-width:91.6666666667%}.col-sm-12{flex:0 0 100%;max-width:100%}.v-application--is-ltr .offset-sm-0{margin-left:0}.v-application--is-rtl .offset-sm-0{margin-right:0}.v-application--is-ltr .offset-sm-1{margin-left:8.3333333333%}.v-application--is-rtl .offset-sm-1{margin-right:8.3333333333%}.v-application--is-ltr .offset-sm-2{margin-left:16.6666666667%}.v-application--is-rtl .offset-sm-2{margin-right:16.6666666667%}.v-application--is-ltr .offset-sm-3{margin-left:25%}.v-application--is-rtl .offset-sm-3{margin-right:25%}.v-application--is-ltr .offset-sm-4{margin-left:33.3333333333%}.v-application--is-rtl .offset-sm-4{margin-right:33.3333333333%}.v-application--is-ltr .offset-sm-5{margin-left:41.6666666667%}.v-application--is-rtl .offset-sm-5{margin-right:41.6666666667%}.v-application--is-ltr .offset-sm-6{margin-left:50%}.v-application--is-rtl .offset-sm-6{margin-right:50%}.v-application--is-ltr .offset-sm-7{margin-left:58.3333333333%}.v-application--is-rtl .offset-sm-7{margin-right:58.3333333333%}.v-application--is-ltr .offset-sm-8{margin-left:66.6666666667%}.v-application--is-rtl .offset-sm-8{margin-right:66.6666666667%}.v-application--is-ltr .offset-sm-9{margin-left:75%}.v-application--is-rtl .offset-sm-9{margin-right:75%}.v-application--is-ltr .offset-sm-10{margin-left:83.3333333333%}.v-application--is-rtl .offset-sm-10{margin-right:83.3333333333%}.v-application--is-ltr .offset-sm-11{margin-left:91.6666666667%}.v-application--is-rtl .offset-sm-11{margin-right:91.6666666667%}}@media(min-width:960px){.col-md{flex-basis:0;flex-grow:1;max-width:100%}.col-md-auto{flex:0 0 auto;width:auto;max-width:100%}.col-md-1{flex:0 0 8.3333333333%;max-width:8.3333333333%}.col-md-2{flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-md-3{flex:0 0 25%;max-width:25%}.col-md-4{flex:0 0 33.3333333333%;max-width:33.3333333333%}.col-md-5{flex:0 0 41.6666666667%;max-width:41.6666666667%}.col-md-6{flex:0 0 50%;max-width:50%}.col-md-7{flex:0 0 58.3333333333%;max-width:58.3333333333%}.col-md-8{flex:0 0 66.6666666667%;max-width:66.6666666667%}.col-md-9{flex:0 0 75%;max-width:75%}.col-md-10{flex:0 0 83.3333333333%;max-width:83.3333333333%}.col-md-11{flex:0 0 91.6666666667%;max-width:91.6666666667%}.col-md-12{flex:0 0 100%;max-width:100%}.v-application--is-ltr .offset-md-0{margin-left:0}.v-application--is-rtl .offset-md-0{margin-right:0}.v-application--is-ltr .offset-md-1{margin-left:8.3333333333%}.v-application--is-rtl .offset-md-1{margin-right:8.3333333333%}.v-application--is-ltr .offset-md-2{margin-left:16.6666666667%}.v-application--is-rtl .offset-md-2{margin-right:16.6666666667%}.v-application--is-ltr .offset-md-3{margin-left:25%}.v-application--is-rtl .offset-md-3{margin-right:25%}.v-application--is-ltr .offset-md-4{margin-left:33.3333333333%}.v-application--is-rtl .offset-md-4{margin-right:33.3333333333%}.v-application--is-ltr .offset-md-5{margin-left:41.6666666667%}.v-application--is-rtl .offset-md-5{margin-right:41.6666666667%}.v-application--is-ltr .offset-md-6{margin-left:50%}.v-application--is-rtl .offset-md-6{margin-right:50%}.v-application--is-ltr .offset-md-7{margin-left:58.3333333333%}.v-application--is-rtl .offset-md-7{margin-right:58.3333333333%}.v-application--is-ltr .offset-md-8{margin-left:66.6666666667%}.v-application--is-rtl .offset-md-8{margin-right:66.6666666667%}.v-application--is-ltr .offset-md-9{margin-left:75%}.v-application--is-rtl .offset-md-9{margin-right:75%}.v-application--is-ltr .offset-md-10{margin-left:83.3333333333%}.v-application--is-rtl .offset-md-10{margin-right:83.3333333333%}.v-application--is-ltr .offset-md-11{margin-left:91.6666666667%}.v-application--is-rtl .offset-md-11{margin-right:91.6666666667%}}@media(min-width:1264px){.col-lg{flex-basis:0;flex-grow:1;max-width:100%}.col-lg-auto{flex:0 0 auto;width:auto;max-width:100%}.col-lg-1{flex:0 0 8.3333333333%;max-width:8.3333333333%}.col-lg-2{flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-lg-3{flex:0 0 25%;max-width:25%}.col-lg-4{flex:0 0 33.3333333333%;max-width:33.3333333333%}.col-lg-5{flex:0 0 41.6666666667%;max-width:41.6666666667%}.col-lg-6{flex:0 0 50%;max-width:50%}.col-lg-7{flex:0 0 58.3333333333%;max-width:58.3333333333%}.col-lg-8{flex:0 0 66.6666666667%;max-width:66.6666666667%}.col-lg-9{flex:0 0 75%;max-width:75%}.col-lg-10{flex:0 0 83.3333333333%;max-width:83.3333333333%}.col-lg-11{flex:0 0 91.6666666667%;max-width:91.6666666667%}.col-lg-12{flex:0 0 100%;max-width:100%}.v-application--is-ltr .offset-lg-0{margin-left:0}.v-application--is-rtl .offset-lg-0{margin-right:0}.v-application--is-ltr .offset-lg-1{margin-left:8.3333333333%}.v-application--is-rtl .offset-lg-1{margin-right:8.3333333333%}.v-application--is-ltr .offset-lg-2{margin-left:16.6666666667%}.v-application--is-rtl .offset-lg-2{margin-right:16.6666666667%}.v-application--is-ltr .offset-lg-3{margin-left:25%}.v-application--is-rtl .offset-lg-3{margin-right:25%}.v-application--is-ltr .offset-lg-4{margin-left:33.3333333333%}.v-application--is-rtl .offset-lg-4{margin-right:33.3333333333%}.v-application--is-ltr .offset-lg-5{margin-left:41.6666666667%}.v-application--is-rtl .offset-lg-5{margin-right:41.6666666667%}.v-application--is-ltr .offset-lg-6{margin-left:50%}.v-application--is-rtl .offset-lg-6{margin-right:50%}.v-application--is-ltr .offset-lg-7{margin-left:58.3333333333%}.v-application--is-rtl .offset-lg-7{margin-right:58.3333333333%}.v-application--is-ltr .offset-lg-8{margin-left:66.6666666667%}.v-application--is-rtl .offset-lg-8{margin-right:66.6666666667%}.v-application--is-ltr .offset-lg-9{margin-left:75%}.v-application--is-rtl .offset-lg-9{margin-right:75%}.v-application--is-ltr .offset-lg-10{margin-left:83.3333333333%}.v-application--is-rtl .offset-lg-10{margin-right:83.3333333333%}.v-application--is-ltr .offset-lg-11{margin-left:91.6666666667%}.v-application--is-rtl .offset-lg-11{margin-right:91.6666666667%}}@media(min-width:1904px){.col-xl{flex-basis:0;flex-grow:1;max-width:100%}.col-xl-auto{flex:0 0 auto;width:auto;max-width:100%}.col-xl-1{flex:0 0 8.3333333333%;max-width:8.3333333333%}.col-xl-2{flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-xl-3{flex:0 0 25%;max-width:25%}.col-xl-4{flex:0 0 33.3333333333%;max-width:33.3333333333%}.col-xl-5{flex:0 0 41.6666666667%;max-width:41.6666666667%}.col-xl-6{flex:0 0 50%;max-width:50%}.col-xl-7{flex:0 0 58.3333333333%;max-width:58.3333333333%}.col-xl-8{flex:0 0 66.6666666667%;max-width:66.6666666667%}.col-xl-9{flex:0 0 75%;max-width:75%}.col-xl-10{flex:0 0 83.3333333333%;max-width:83.3333333333%}.col-xl-11{flex:0 0 91.6666666667%;max-width:91.6666666667%}.col-xl-12{flex:0 0 100%;max-width:100%}.v-application--is-ltr .offset-xl-0{margin-left:0}.v-application--is-rtl .offset-xl-0{margin-right:0}.v-application--is-ltr .offset-xl-1{margin-left:8.3333333333%}.v-application--is-rtl .offset-xl-1{margin-right:8.3333333333%}.v-application--is-ltr .offset-xl-2{margin-left:16.6666666667%}.v-application--is-rtl .offset-xl-2{margin-right:16.6666666667%}.v-application--is-ltr .offset-xl-3{margin-left:25%}.v-application--is-rtl .offset-xl-3{margin-right:25%}.v-application--is-ltr .offset-xl-4{margin-left:33.3333333333%}.v-application--is-rtl .offset-xl-4{margin-right:33.3333333333%}.v-application--is-ltr .offset-xl-5{margin-left:41.6666666667%}.v-application--is-rtl .offset-xl-5{margin-right:41.6666666667%}.v-application--is-ltr .offset-xl-6{margin-left:50%}.v-application--is-rtl .offset-xl-6{margin-right:50%}.v-application--is-ltr .offset-xl-7{margin-left:58.3333333333%}.v-application--is-rtl .offset-xl-7{margin-right:58.3333333333%}.v-application--is-ltr .offset-xl-8{margin-left:66.6666666667%}.v-application--is-rtl .offset-xl-8{margin-right:66.6666666667%}.v-application--is-ltr .offset-xl-9{margin-left:75%}.v-application--is-rtl .offset-xl-9{margin-right:75%}.v-application--is-ltr .offset-xl-10{margin-left:83.3333333333%}.v-application--is-rtl .offset-xl-10{margin-right:83.3333333333%}.v-application--is-ltr .offset-xl-11{margin-left:91.6666666667%}.v-application--is-rtl .offset-xl-11{margin-right:91.6666666667%}}.v-dialog{border-radius:4px;margin:24px;overflow-y:auto;pointer-events:auto;transition:.3s cubic-bezier(.25,.8,.25,1);width:100%;z-index:inherit;box-shadow:0 11px 15px -7px rgba(0,0,0,.2),0 24px 38px 3px rgba(0,0,0,.14),0 9px 46px 8px rgba(0,0,0,.12)}.v-dialog:not(.v-dialog--fullscreen){max-height:90%}.v-dialog>*{width:100%}.v-dialog>.v-card>.v-card__title{font-size:1.25rem;font-weight:500;letter-spacing:.0125em;padding:16px 24px 10px}.v-dialog>.v-card>.v-card__subtitle,.v-dialog>.v-card>.v-card__text{padding:0 24px 20px}.v-dialog>.v-card>.v-card__actions{padding:8px 16px}.v-dialog__content{align-items:center;display:flex;height:100%;justify-content:center;left:0;pointer-events:none;position:fixed;top:0;transition:.2s cubic-bezier(.25,.8,.25,1),z-index 1ms;width:100%;z-index:6;outline:none}.v-dialog__container{display:none}.v-dialog__container--attached{display:inline}.v-dialog--animated{animation-duration:.15s;animation-name:animate-dialog;animation-timing-function:cubic-bezier(.25,.8,.25,1)}.v-dialog--fullscreen{border-radius:0;margin:0;height:100%;position:fixed;overflow-y:auto;top:0;left:0}.v-dialog--fullscreen>.v-card{min-height:100%;min-width:100%;margin:0!important;padding:0!important}.v-dialog--scrollable,.v-dialog--scrollable>form{display:flex}.v-dialog--scrollable>.v-card,.v-dialog--scrollable>form>.v-card{display:flex;flex:1 1 100%;flex-direction:column;max-height:100%;max-width:100%}.v-dialog--scrollable>.v-card>.v-card__actions,.v-dialog--scrollable>.v-card>.v-card__title,.v-dialog--scrollable>form>.v-card>.v-card__actions,.v-dialog--scrollable>form>.v-card>.v-card__title{flex:0 0 auto}.v-dialog--scrollable>.v-card>.v-card__text,.v-dialog--scrollable>form>.v-card>.v-card__text{backface-visibility:hidden;flex:1 1 auto;overflow-y:auto}@keyframes animate-dialog{0%{transform:scale(1)}50%{transform:scale(1.03)}to{transform:scale(1)}}.theme--light.v-overlay{color:rgba(0,0,0,.87)}.theme--dark.v-overlay{color:#fff}.v-overlay{align-items:center;border-radius:inherit;display:flex;justify-content:center;position:fixed;top:0;left:0;right:0;bottom:0;pointer-events:none;transition:.3s cubic-bezier(.25,.8,.5,1),z-index 1ms}.v-overlay__content{position:relative}.v-overlay__scrim{border-radius:inherit;bottom:0;height:100%;left:0;position:absolute;right:0;top:0;transition:inherit;width:100%;will-change:opacity}.v-overlay--absolute{position:absolute}.v-overlay--active{pointer-events:auto}.theme--light.v-divider{border-color:rgba(0,0,0,.12)}.theme--dark.v-divider{border-color:hsla(0,0%,100%,.12)}.v-divider{display:block;flex:1 1 0px;max-width:100%;height:0;max-height:0;border:solid;border-width:thin 0 0 0;transition:inherit}.v-divider--inset:not(.v-divider--vertical){max-width:calc(100% - 72px)}.v-application--is-ltr .v-divider--inset:not(.v-divider--vertical){margin-left:72px}.v-application--is-rtl .v-divider--inset:not(.v-divider--vertical){margin-right:72px}.v-divider--vertical{align-self:stretch;border:solid;border-width:0 thin 0 0;display:inline-flex;height:inherit;min-height:100%;max-height:100%;max-width:0;width:0;vertical-align:text-bottom;margin:0 -1px}.v-divider--vertical.v-divider--inset{margin-top:8px;min-height:0;max-height:calc(100% - 16px)}.container.grow-shrink-0{flex-grow:0;flex-shrink:0}.container.fill-height{align-items:center;display:flex;flex-wrap:wrap}.container.fill-height>.row{flex:1 1 100%;max-width:calc(100% + 24px)}.container.fill-height>.layout{height:100%;flex:1 1 auto}.container.fill-height>.layout.grow-shrink-0{flex-grow:0;flex-shrink:0}.container.grid-list-xs .layout .flex{padding:1px}.container.grid-list-xs .layout:only-child{margin:-1px}.container.grid-list-xs .layout:not(:only-child){margin:auto -1px}.container.grid-list-xs :not(:only-child) .layout:first-child{margin-top:-1px}.container.grid-list-xs :not(:only-child) .layout:last-child{margin-bottom:-1px}.container.grid-list-sm .layout .flex{padding:2px}.container.grid-list-sm .layout:only-child{margin:-2px}.container.grid-list-sm .layout:not(:only-child){margin:auto -2px}.container.grid-list-sm :not(:only-child) .layout:first-child{margin-top:-2px}.container.grid-list-sm :not(:only-child) .layout:last-child{margin-bottom:-2px}.container.grid-list-md .layout .flex{padding:4px}.container.grid-list-md .layout:only-child{margin:-4px}.container.grid-list-md .layout:not(:only-child){margin:auto -4px}.container.grid-list-md :not(:only-child) .layout:first-child{margin-top:-4px}.container.grid-list-md :not(:only-child) .layout:last-child{margin-bottom:-4px}.container.grid-list-lg .layout .flex{padding:8px}.container.grid-list-lg .layout:only-child{margin:-8px}.container.grid-list-lg .layout:not(:only-child){margin:auto -8px}.container.grid-list-lg :not(:only-child) .layout:first-child{margin-top:-8px}.container.grid-list-lg :not(:only-child) .layout:last-child{margin-bottom:-8px}.container.grid-list-xl .layout .flex{padding:12px}.container.grid-list-xl .layout:only-child{margin:-12px}.container.grid-list-xl .layout:not(:only-child){margin:auto -12px}.container.grid-list-xl :not(:only-child) .layout:first-child{margin-top:-12px}.container.grid-list-xl :not(:only-child) .layout:last-child{margin-bottom:-12px}.layout{display:flex;flex:1 1 auto;flex-wrap:nowrap;min-width:0}.layout.reverse{flex-direction:row-reverse}.layout.column{flex-direction:column}.layout.column.reverse{flex-direction:column-reverse}.layout.column>.flex{max-width:100%}.layout.wrap{flex-wrap:wrap}.layout.grow-shrink-0{flex-grow:0;flex-shrink:0}@media (min-width:0){.flex.xs12{flex-basis:100%;flex-grow:0;max-width:100%}.flex.order-xs12{order:12}.flex.xs11{flex-basis:91.6666666667%;flex-grow:0;max-width:91.6666666667%}.flex.order-xs11{order:11}.flex.xs10{flex-basis:83.3333333333%;flex-grow:0;max-width:83.3333333333%}.flex.order-xs10{order:10}.flex.xs9{flex-basis:75%;flex-grow:0;max-width:75%}.flex.order-xs9{order:9}.flex.xs8{flex-basis:66.6666666667%;flex-grow:0;max-width:66.6666666667%}.flex.order-xs8{order:8}.flex.xs7{flex-basis:58.3333333333%;flex-grow:0;max-width:58.3333333333%}.flex.order-xs7{order:7}.flex.xs6{flex-basis:50%;flex-grow:0;max-width:50%}.flex.order-xs6{order:6}.flex.xs5{flex-basis:41.6666666667%;flex-grow:0;max-width:41.6666666667%}.flex.order-xs5{order:5}.flex.xs4{flex-basis:33.3333333333%;flex-grow:0;max-width:33.3333333333%}.flex.order-xs4{order:4}.flex.xs3{flex-basis:25%;flex-grow:0;max-width:25%}.flex.order-xs3{order:3}.flex.xs2{flex-basis:16.6666666667%;flex-grow:0;max-width:16.6666666667%}.flex.order-xs2{order:2}.flex.xs1{flex-basis:8.3333333333%;flex-grow:0;max-width:8.3333333333%}.flex.order-xs1{order:1}.v-application--is-ltr .flex.offset-xs12{margin-left:100%}.v-application--is-rtl .flex.offset-xs12{margin-right:100%}.v-application--is-ltr .flex.offset-xs11{margin-left:91.6666666667%}.v-application--is-rtl .flex.offset-xs11{margin-right:91.6666666667%}.v-application--is-ltr .flex.offset-xs10{margin-left:83.3333333333%}.v-application--is-rtl .flex.offset-xs10{margin-right:83.3333333333%}.v-application--is-ltr .flex.offset-xs9{margin-left:75%}.v-application--is-rtl .flex.offset-xs9{margin-right:75%}.v-application--is-ltr .flex.offset-xs8{margin-left:66.6666666667%}.v-application--is-rtl .flex.offset-xs8{margin-right:66.6666666667%}.v-application--is-ltr .flex.offset-xs7{margin-left:58.3333333333%}.v-application--is-rtl .flex.offset-xs7{margin-right:58.3333333333%}.v-application--is-ltr .flex.offset-xs6{margin-left:50%}.v-application--is-rtl .flex.offset-xs6{margin-right:50%}.v-application--is-ltr .flex.offset-xs5{margin-left:41.6666666667%}.v-application--is-rtl .flex.offset-xs5{margin-right:41.6666666667%}.v-application--is-ltr .flex.offset-xs4{margin-left:33.3333333333%}.v-application--is-rtl .flex.offset-xs4{margin-right:33.3333333333%}.v-application--is-ltr .flex.offset-xs3{margin-left:25%}.v-application--is-rtl .flex.offset-xs3{margin-right:25%}.v-application--is-ltr .flex.offset-xs2{margin-left:16.6666666667%}.v-application--is-rtl .flex.offset-xs2{margin-right:16.6666666667%}.v-application--is-ltr .flex.offset-xs1{margin-left:8.3333333333%}.v-application--is-rtl .flex.offset-xs1{margin-right:8.3333333333%}.v-application--is-ltr .flex.offset-xs0{margin-left:0}.v-application--is-rtl .flex.offset-xs0{margin-right:0}}@media (min-width:600px){.flex.sm12{flex-basis:100%;flex-grow:0;max-width:100%}.flex.order-sm12{order:12}.flex.sm11{flex-basis:91.6666666667%;flex-grow:0;max-width:91.6666666667%}.flex.order-sm11{order:11}.flex.sm10{flex-basis:83.3333333333%;flex-grow:0;max-width:83.3333333333%}.flex.order-sm10{order:10}.flex.sm9{flex-basis:75%;flex-grow:0;max-width:75%}.flex.order-sm9{order:9}.flex.sm8{flex-basis:66.6666666667%;flex-grow:0;max-width:66.6666666667%}.flex.order-sm8{order:8}.flex.sm7{flex-basis:58.3333333333%;flex-grow:0;max-width:58.3333333333%}.flex.order-sm7{order:7}.flex.sm6{flex-basis:50%;flex-grow:0;max-width:50%}.flex.order-sm6{order:6}.flex.sm5{flex-basis:41.6666666667%;flex-grow:0;max-width:41.6666666667%}.flex.order-sm5{order:5}.flex.sm4{flex-basis:33.3333333333%;flex-grow:0;max-width:33.3333333333%}.flex.order-sm4{order:4}.flex.sm3{flex-basis:25%;flex-grow:0;max-width:25%}.flex.order-sm3{order:3}.flex.sm2{flex-basis:16.6666666667%;flex-grow:0;max-width:16.6666666667%}.flex.order-sm2{order:2}.flex.sm1{flex-basis:8.3333333333%;flex-grow:0;max-width:8.3333333333%}.flex.order-sm1{order:1}.v-application--is-ltr .flex.offset-sm12{margin-left:100%}.v-application--is-rtl .flex.offset-sm12{margin-right:100%}.v-application--is-ltr .flex.offset-sm11{margin-left:91.6666666667%}.v-application--is-rtl .flex.offset-sm11{margin-right:91.6666666667%}.v-application--is-ltr .flex.offset-sm10{margin-left:83.3333333333%}.v-application--is-rtl .flex.offset-sm10{margin-right:83.3333333333%}.v-application--is-ltr .flex.offset-sm9{margin-left:75%}.v-application--is-rtl .flex.offset-sm9{margin-right:75%}.v-application--is-ltr .flex.offset-sm8{margin-left:66.6666666667%}.v-application--is-rtl .flex.offset-sm8{margin-right:66.6666666667%}.v-application--is-ltr .flex.offset-sm7{margin-left:58.3333333333%}.v-application--is-rtl .flex.offset-sm7{margin-right:58.3333333333%}.v-application--is-ltr .flex.offset-sm6{margin-left:50%}.v-application--is-rtl .flex.offset-sm6{margin-right:50%}.v-application--is-ltr .flex.offset-sm5{margin-left:41.6666666667%}.v-application--is-rtl .flex.offset-sm5{margin-right:41.6666666667%}.v-application--is-ltr .flex.offset-sm4{margin-left:33.3333333333%}.v-application--is-rtl .flex.offset-sm4{margin-right:33.3333333333%}.v-application--is-ltr .flex.offset-sm3{margin-left:25%}.v-application--is-rtl .flex.offset-sm3{margin-right:25%}.v-application--is-ltr .flex.offset-sm2{margin-left:16.6666666667%}.v-application--is-rtl .flex.offset-sm2{margin-right:16.6666666667%}.v-application--is-ltr .flex.offset-sm1{margin-left:8.3333333333%}.v-application--is-rtl .flex.offset-sm1{margin-right:8.3333333333%}.v-application--is-ltr .flex.offset-sm0{margin-left:0}.v-application--is-rtl .flex.offset-sm0{margin-right:0}}@media (min-width:960px){.flex.md12{flex-basis:100%;flex-grow:0;max-width:100%}.flex.order-md12{order:12}.flex.md11{flex-basis:91.6666666667%;flex-grow:0;max-width:91.6666666667%}.flex.order-md11{order:11}.flex.md10{flex-basis:83.3333333333%;flex-grow:0;max-width:83.3333333333%}.flex.order-md10{order:10}.flex.md9{flex-basis:75%;flex-grow:0;max-width:75%}.flex.order-md9{order:9}.flex.md8{flex-basis:66.6666666667%;flex-grow:0;max-width:66.6666666667%}.flex.order-md8{order:8}.flex.md7{flex-basis:58.3333333333%;flex-grow:0;max-width:58.3333333333%}.flex.order-md7{order:7}.flex.md6{flex-basis:50%;flex-grow:0;max-width:50%}.flex.order-md6{order:6}.flex.md5{flex-basis:41.6666666667%;flex-grow:0;max-width:41.6666666667%}.flex.order-md5{order:5}.flex.md4{flex-basis:33.3333333333%;flex-grow:0;max-width:33.3333333333%}.flex.order-md4{order:4}.flex.md3{flex-basis:25%;flex-grow:0;max-width:25%}.flex.order-md3{order:3}.flex.md2{flex-basis:16.6666666667%;flex-grow:0;max-width:16.6666666667%}.flex.order-md2{order:2}.flex.md1{flex-basis:8.3333333333%;flex-grow:0;max-width:8.3333333333%}.flex.order-md1{order:1}.v-application--is-ltr .flex.offset-md12{margin-left:100%}.v-application--is-rtl .flex.offset-md12{margin-right:100%}.v-application--is-ltr .flex.offset-md11{margin-left:91.6666666667%}.v-application--is-rtl .flex.offset-md11{margin-right:91.6666666667%}.v-application--is-ltr .flex.offset-md10{margin-left:83.3333333333%}.v-application--is-rtl .flex.offset-md10{margin-right:83.3333333333%}.v-application--is-ltr .flex.offset-md9{margin-left:75%}.v-application--is-rtl .flex.offset-md9{margin-right:75%}.v-application--is-ltr .flex.offset-md8{margin-left:66.6666666667%}.v-application--is-rtl .flex.offset-md8{margin-right:66.6666666667%}.v-application--is-ltr .flex.offset-md7{margin-left:58.3333333333%}.v-application--is-rtl .flex.offset-md7{margin-right:58.3333333333%}.v-application--is-ltr .flex.offset-md6{margin-left:50%}.v-application--is-rtl .flex.offset-md6{margin-right:50%}.v-application--is-ltr .flex.offset-md5{margin-left:41.6666666667%}.v-application--is-rtl .flex.offset-md5{margin-right:41.6666666667%}.v-application--is-ltr .flex.offset-md4{margin-left:33.3333333333%}.v-application--is-rtl .flex.offset-md4{margin-right:33.3333333333%}.v-application--is-ltr .flex.offset-md3{margin-left:25%}.v-application--is-rtl .flex.offset-md3{margin-right:25%}.v-application--is-ltr .flex.offset-md2{margin-left:16.6666666667%}.v-application--is-rtl .flex.offset-md2{margin-right:16.6666666667%}.v-application--is-ltr .flex.offset-md1{margin-left:8.3333333333%}.v-application--is-rtl .flex.offset-md1{margin-right:8.3333333333%}.v-application--is-ltr .flex.offset-md0{margin-left:0}.v-application--is-rtl .flex.offset-md0{margin-right:0}}@media (min-width:1264px){.flex.lg12{flex-basis:100%;flex-grow:0;max-width:100%}.flex.order-lg12{order:12}.flex.lg11{flex-basis:91.6666666667%;flex-grow:0;max-width:91.6666666667%}.flex.order-lg11{order:11}.flex.lg10{flex-basis:83.3333333333%;flex-grow:0;max-width:83.3333333333%}.flex.order-lg10{order:10}.flex.lg9{flex-basis:75%;flex-grow:0;max-width:75%}.flex.order-lg9{order:9}.flex.lg8{flex-basis:66.6666666667%;flex-grow:0;max-width:66.6666666667%}.flex.order-lg8{order:8}.flex.lg7{flex-basis:58.3333333333%;flex-grow:0;max-width:58.3333333333%}.flex.order-lg7{order:7}.flex.lg6{flex-basis:50%;flex-grow:0;max-width:50%}.flex.order-lg6{order:6}.flex.lg5{flex-basis:41.6666666667%;flex-grow:0;max-width:41.6666666667%}.flex.order-lg5{order:5}.flex.lg4{flex-basis:33.3333333333%;flex-grow:0;max-width:33.3333333333%}.flex.order-lg4{order:4}.flex.lg3{flex-basis:25%;flex-grow:0;max-width:25%}.flex.order-lg3{order:3}.flex.lg2{flex-basis:16.6666666667%;flex-grow:0;max-width:16.6666666667%}.flex.order-lg2{order:2}.flex.lg1{flex-basis:8.3333333333%;flex-grow:0;max-width:8.3333333333%}.flex.order-lg1{order:1}.v-application--is-ltr .flex.offset-lg12{margin-left:100%}.v-application--is-rtl .flex.offset-lg12{margin-right:100%}.v-application--is-ltr .flex.offset-lg11{margin-left:91.6666666667%}.v-application--is-rtl .flex.offset-lg11{margin-right:91.6666666667%}.v-application--is-ltr .flex.offset-lg10{margin-left:83.3333333333%}.v-application--is-rtl .flex.offset-lg10{margin-right:83.3333333333%}.v-application--is-ltr .flex.offset-lg9{margin-left:75%}.v-application--is-rtl .flex.offset-lg9{margin-right:75%}.v-application--is-ltr .flex.offset-lg8{margin-left:66.6666666667%}.v-application--is-rtl .flex.offset-lg8{margin-right:66.6666666667%}.v-application--is-ltr .flex.offset-lg7{margin-left:58.3333333333%}.v-application--is-rtl .flex.offset-lg7{margin-right:58.3333333333%}.v-application--is-ltr .flex.offset-lg6{margin-left:50%}.v-application--is-rtl .flex.offset-lg6{margin-right:50%}.v-application--is-ltr .flex.offset-lg5{margin-left:41.6666666667%}.v-application--is-rtl .flex.offset-lg5{margin-right:41.6666666667%}.v-application--is-ltr .flex.offset-lg4{margin-left:33.3333333333%}.v-application--is-rtl .flex.offset-lg4{margin-right:33.3333333333%}.v-application--is-ltr .flex.offset-lg3{margin-left:25%}.v-application--is-rtl .flex.offset-lg3{margin-right:25%}.v-application--is-ltr .flex.offset-lg2{margin-left:16.6666666667%}.v-application--is-rtl .flex.offset-lg2{margin-right:16.6666666667%}.v-application--is-ltr .flex.offset-lg1{margin-left:8.3333333333%}.v-application--is-rtl .flex.offset-lg1{margin-right:8.3333333333%}.v-application--is-ltr .flex.offset-lg0{margin-left:0}.v-application--is-rtl .flex.offset-lg0{margin-right:0}}@media (min-width:1904px){.flex.xl12{flex-basis:100%;flex-grow:0;max-width:100%}.flex.order-xl12{order:12}.flex.xl11{flex-basis:91.6666666667%;flex-grow:0;max-width:91.6666666667%}.flex.order-xl11{order:11}.flex.xl10{flex-basis:83.3333333333%;flex-grow:0;max-width:83.3333333333%}.flex.order-xl10{order:10}.flex.xl9{flex-basis:75%;flex-grow:0;max-width:75%}.flex.order-xl9{order:9}.flex.xl8{flex-basis:66.6666666667%;flex-grow:0;max-width:66.6666666667%}.flex.order-xl8{order:8}.flex.xl7{flex-basis:58.3333333333%;flex-grow:0;max-width:58.3333333333%}.flex.order-xl7{order:7}.flex.xl6{flex-basis:50%;flex-grow:0;max-width:50%}.flex.order-xl6{order:6}.flex.xl5{flex-basis:41.6666666667%;flex-grow:0;max-width:41.6666666667%}.flex.order-xl5{order:5}.flex.xl4{flex-basis:33.3333333333%;flex-grow:0;max-width:33.3333333333%}.flex.order-xl4{order:4}.flex.xl3{flex-basis:25%;flex-grow:0;max-width:25%}.flex.order-xl3{order:3}.flex.xl2{flex-basis:16.6666666667%;flex-grow:0;max-width:16.6666666667%}.flex.order-xl2{order:2}.flex.xl1{flex-basis:8.3333333333%;flex-grow:0;max-width:8.3333333333%}.flex.order-xl1{order:1}.v-application--is-ltr .flex.offset-xl12{margin-left:100%}.v-application--is-rtl .flex.offset-xl12{margin-right:100%}.v-application--is-ltr .flex.offset-xl11{margin-left:91.6666666667%}.v-application--is-rtl .flex.offset-xl11{margin-right:91.6666666667%}.v-application--is-ltr .flex.offset-xl10{margin-left:83.3333333333%}.v-application--is-rtl .flex.offset-xl10{margin-right:83.3333333333%}.v-application--is-ltr .flex.offset-xl9{margin-left:75%}.v-application--is-rtl .flex.offset-xl9{margin-right:75%}.v-application--is-ltr .flex.offset-xl8{margin-left:66.6666666667%}.v-application--is-rtl .flex.offset-xl8{margin-right:66.6666666667%}.v-application--is-ltr .flex.offset-xl7{margin-left:58.3333333333%}.v-application--is-rtl .flex.offset-xl7{margin-right:58.3333333333%}.v-application--is-ltr .flex.offset-xl6{margin-left:50%}.v-application--is-rtl .flex.offset-xl6{margin-right:50%}.v-application--is-ltr .flex.offset-xl5{margin-left:41.6666666667%}.v-application--is-rtl .flex.offset-xl5{margin-right:41.6666666667%}.v-application--is-ltr .flex.offset-xl4{margin-left:33.3333333333%}.v-application--is-rtl .flex.offset-xl4{margin-right:33.3333333333%}.v-application--is-ltr .flex.offset-xl3{margin-left:25%}.v-application--is-rtl .flex.offset-xl3{margin-right:25%}.v-application--is-ltr .flex.offset-xl2{margin-left:16.6666666667%}.v-application--is-rtl .flex.offset-xl2{margin-right:16.6666666667%}.v-application--is-ltr .flex.offset-xl1{margin-left:8.3333333333%}.v-application--is-rtl .flex.offset-xl1{margin-right:8.3333333333%}.v-application--is-ltr .flex.offset-xl0{margin-left:0}.v-application--is-rtl .flex.offset-xl0{margin-right:0}}.child-flex>*,.flex{flex:1 1 auto;max-width:100%}.child-flex>.grow-shrink-0,.flex.grow-shrink-0{flex-grow:0;flex-shrink:0}.grow,.spacer{flex-grow:1!important}.grow{flex-shrink:0!important}.shrink{flex-grow:0!important;flex-shrink:1!important}.fill-height{height:100%}.theme--light.v-text-field>.v-input__control>.v-input__slot:before{border-color:rgba(0,0,0,.42)}.theme--light.v-text-field:not(.v-input--has-state):hover>.v-input__control>.v-input__slot:before{border-color:rgba(0,0,0,.87)}.theme--light.v-text-field.v-input--is-disabled .v-input__slot:before{-o-border-image:repeating-linear-gradient(90deg,rgba(0,0,0,.38) 0,rgba(0,0,0,.38) 2px,transparent 0,transparent 4px) 1 repeat;border-image:repeating-linear-gradient(90deg,rgba(0,0,0,.38) 0,rgba(0,0,0,.38) 2px,transparent 0,transparent 4px) 1 repeat}.theme--light.v-text-field--filled>.v-input__control>.v-input__slot{background:rgba(0,0,0,.06)}.theme--light.v-text-field--filled:not(.v-input--is-focused):not(.v-input--has-state)>.v-input__control>.v-input__slot:hover{background:rgba(0,0,0,.12)}.theme--light.v-text-field--solo>.v-input__control>.v-input__slot{background:#fff}.theme--light.v-text-field--solo-inverted>.v-input__control>.v-input__slot{background:rgba(0,0,0,.06)}.theme--light.v-text-field--solo-inverted.v-input--is-focused>.v-input__control>.v-input__slot{background:#424242}.theme--light.v-text-field--solo-inverted.v-input--is-focused>.v-input__control>.v-input__slot input{color:#fff}.theme--light.v-text-field--solo-inverted.v-input--is-focused>.v-input__control>.v-input__slot input::-moz-placeholder{color:hsla(0,0%,100%,.5)}.theme--light.v-text-field--solo-inverted.v-input--is-focused>.v-input__control>.v-input__slot input:-ms-input-placeholder{color:hsla(0,0%,100%,.5)}.theme--light.v-text-field--solo-inverted.v-input--is-focused>.v-input__control>.v-input__slot input::placeholder{color:hsla(0,0%,100%,.5)}.theme--light.v-text-field--solo-inverted.v-input--is-focused>.v-input__control>.v-input__slot .v-label{color:hsla(0,0%,100%,.7)}.theme--light.v-text-field--outlined:not(.v-input--is-focused):not(.v-input--has-state)>.v-input__control>.v-input__slot fieldset{color:rgba(0,0,0,.38)}.theme--light.v-text-field--outlined:not(.v-input--is-focused):not(.v-input--has-state):not(.v-input--is-disabled)>.v-input__control>.v-input__slot:hover fieldset{color:rgba(0,0,0,.86)}.theme--light.v-text-field--outlined:not(.v-input--is-focused).v-input--is-disabled>.v-input__control>.v-input__slot fieldset{color:rgba(0,0,0,.26)}.theme--dark.v-text-field>.v-input__control>.v-input__slot:before{border-color:hsla(0,0%,100%,.7)}.theme--dark.v-text-field:not(.v-input--has-state):hover>.v-input__control>.v-input__slot:before{border-color:#fff}.theme--dark.v-text-field.v-input--is-disabled .v-input__slot:before{-o-border-image:repeating-linear-gradient(90deg,hsla(0,0%,100%,.5) 0,hsla(0,0%,100%,.5) 2px,transparent 0,transparent 4px) 1 repeat;border-image:repeating-linear-gradient(90deg,hsla(0,0%,100%,.5) 0,hsla(0,0%,100%,.5) 2px,transparent 0,transparent 4px) 1 repeat}.theme--dark.v-text-field--filled>.v-input__control>.v-input__slot{background:hsla(0,0%,100%,.08)}.theme--dark.v-text-field--filled:not(.v-input--is-focused):not(.v-input--has-state)>.v-input__control>.v-input__slot:hover{background:hsla(0,0%,100%,.16)}.theme--dark.v-text-field--solo>.v-input__control>.v-input__slot{background:#1e1e1e}.theme--dark.v-text-field--solo-inverted>.v-input__control>.v-input__slot{background:hsla(0,0%,100%,.16)}.theme--dark.v-text-field--solo-inverted.v-input--is-focused>.v-input__control>.v-input__slot{background:#fff}.theme--dark.v-text-field--solo-inverted.v-input--is-focused>.v-input__control>.v-input__slot input{color:rgba(0,0,0,.87)}.theme--dark.v-text-field--solo-inverted.v-input--is-focused>.v-input__control>.v-input__slot input::-moz-placeholder{color:rgba(0,0,0,.38)}.theme--dark.v-text-field--solo-inverted.v-input--is-focused>.v-input__control>.v-input__slot input:-ms-input-placeholder{color:rgba(0,0,0,.38)}.theme--dark.v-text-field--solo-inverted.v-input--is-focused>.v-input__control>.v-input__slot input::placeholder{color:rgba(0,0,0,.38)}.theme--dark.v-text-field--solo-inverted.v-input--is-focused>.v-input__control>.v-input__slot .v-label{color:rgba(0,0,0,.6)}.theme--dark.v-text-field--outlined:not(.v-input--is-focused):not(.v-input--has-state)>.v-input__control>.v-input__slot fieldset{color:hsla(0,0%,100%,.24)}.theme--dark.v-text-field--outlined:not(.v-input--is-focused):not(.v-input--has-state):not(.v-input--is-disabled)>.v-input__control>.v-input__slot:hover fieldset{color:#fff}.theme--dark.v-text-field--outlined:not(.v-input--is-focused).v-input--is-disabled>.v-input__control>.v-input__slot fieldset{color:hsla(0,0%,100%,.16)}.v-text-field{padding-top:12px;margin-top:4px}.v-text-field__prefix,.v-text-field__suffix{line-height:20px}.v-text-field input{flex:1 1 auto;line-height:20px;padding:8px 0 8px;max-width:100%;min-width:0;width:100%}.v-text-field .v-input__control,.v-text-field .v-input__slot,.v-text-field fieldset{border-radius:inherit}.v-text-field.v-input--has-state .v-input__control>.v-text-field__details>.v-counter,.v-text-field.v-input--is-disabled .v-input__control>.v-text-field__details>.v-counter,.v-text-field.v-input--is-disabled .v-input__control>.v-text-field__details>.v-messages,.v-text-field .v-input__control,.v-text-field fieldset{color:inherit}.v-text-field.v-input--dense{padding-top:0}.v-text-field.v-input--dense .v-label{top:4px}.v-text-field.v-input--dense:not(.v-text-field--outlined) .v-text-field__prefix,.v-text-field.v-input--dense:not(.v-text-field--outlined) .v-text-field__suffix,.v-text-field.v-input--dense:not(.v-text-field--outlined) input{padding:4px 0 2px}.v-text-field.v-input--dense:not(.v-text-field--outlined) .v-text-field__prefix{padding-right:4px}.v-text-field.v-input--dense:not(.v-text-field--outlined) .v-text-field__suffix{padding-left:4px}.v-text-field.v-input--dense[type=text]::-ms-clear{display:none}.v-text-field.v-input--dense .v-input__append-inner,.v-text-field.v-input--dense .v-input__prepend-inner{margin-top:0}.v-text-field .v-input__append-inner,.v-text-field .v-input__prepend-inner{align-self:flex-start;display:inline-flex;margin-top:4px;line-height:1;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.v-application--is-ltr .v-text-field .v-input__prepend-inner{margin-right:auto;padding-right:4px}.v-application--is-ltr .v-text-field .v-input__append-inner,.v-application--is-rtl .v-text-field .v-input__prepend-inner{margin-left:auto;padding-left:4px}.v-application--is-rtl .v-text-field .v-input__append-inner{margin-right:auto;padding-right:4px}.v-text-field .v-counter{white-space:nowrap}.v-application--is-ltr .v-text-field .v-counter{margin-left:8px}.v-application--is-rtl .v-text-field .v-counter{margin-right:8px}.v-text-field .v-label{max-width:90%;overflow:hidden;text-overflow:ellipsis;top:6px;white-space:nowrap;pointer-events:none}.v-application--is-ltr .v-text-field .v-label{transform-origin:top left}.v-application--is-rtl .v-text-field .v-label{transform-origin:top right}.v-text-field .v-label--active{max-width:133%;transform:translateY(-18px) scale(.75);pointer-events:auto}.v-text-field>.v-input__control>.v-input__slot{cursor:text}.v-text-field>.v-input__control>.v-input__slot:after,.v-text-field>.v-input__control>.v-input__slot:before{bottom:-1px;content:"";left:0;position:absolute;transition:.3s cubic-bezier(.25,.8,.5,1);width:100%}.v-text-field>.v-input__control>.v-input__slot:before{border-color:inherit;border-style:solid;border-width:thin 0 0 0}.v-text-field>.v-input__control>.v-input__slot:after{background-color:currentColor;border-color:currentColor;border-style:solid;border-width:thin 0 thin 0;transform:scaleX(0)}.v-text-field__details{display:flex;flex:1 0 auto;max-width:100%;min-height:14px;overflow:hidden}.v-text-field__prefix,.v-text-field__suffix{align-self:center;cursor:default;transition:color .3s cubic-bezier(.25,.8,.5,1);white-space:nowrap}.v-application--is-ltr .v-text-field__prefix{text-align:right;padding-right:4px}.v-application--is-rtl .v-text-field__prefix{text-align:left;padding-left:4px}.v-text-field__suffix{white-space:nowrap}.v-application--is-ltr .v-text-field__suffix{padding-left:4px}.v-application--is-rtl .v-text-field__suffix{padding-right:4px}.v-application--is-ltr .v-text-field--reverse .v-text-field__prefix{text-align:left;padding-right:0;padding-left:4px}.v-application--is-rtl .v-text-field--reverse .v-text-field__prefix{text-align:right;padding-right:4px;padding-left:0}.v-application--is-ltr .v-text-field--reverse .v-text-field__suffix{padding-left:0;padding-right:4px}.v-application--is-rtl .v-text-field--reverse .v-text-field__suffix{padding-left:4px;padding-right:0}.v-text-field>.v-input__control>.v-input__slot>.v-text-field__slot{display:flex;flex:1 1 auto;position:relative}.v-text-field:not(.v-text-field--is-booted) .v-label,.v-text-field:not(.v-text-field--is-booted) legend{transition:none}.v-text-field--filled,.v-text-field--full-width,.v-text-field--outlined{position:relative}.v-text-field--filled>.v-input__control>.v-input__slot,.v-text-field--full-width>.v-input__control>.v-input__slot,.v-text-field--outlined>.v-input__control>.v-input__slot{align-items:stretch;min-height:56px}.v-text-field--filled.v-input--dense>.v-input__control>.v-input__slot,.v-text-field--full-width.v-input--dense>.v-input__control>.v-input__slot,.v-text-field--outlined.v-input--dense>.v-input__control>.v-input__slot{min-height:52px}.v-text-field--filled.v-input--dense.v-text-field--outlined.v-text-field--filled>.v-input__control>.v-input__slot,.v-text-field--filled.v-input--dense.v-text-field--outlined>.v-input__control>.v-input__slot,.v-text-field--filled.v-input--dense.v-text-field--single-line>.v-input__control>.v-input__slot,.v-text-field--full-width.v-input--dense.v-text-field--outlined.v-text-field--filled>.v-input__control>.v-input__slot,.v-text-field--full-width.v-input--dense.v-text-field--outlined>.v-input__control>.v-input__slot,.v-text-field--full-width.v-input--dense.v-text-field--single-line>.v-input__control>.v-input__slot,.v-text-field--outlined.v-input--dense.v-text-field--outlined.v-text-field--filled>.v-input__control>.v-input__slot,.v-text-field--outlined.v-input--dense.v-text-field--outlined>.v-input__control>.v-input__slot,.v-text-field--outlined.v-input--dense.v-text-field--single-line>.v-input__control>.v-input__slot{min-height:40px}.v-text-field--outlined{border-radius:4px}.v-text-field--enclosed .v-input__append-inner,.v-text-field--enclosed .v-input__append-outer,.v-text-field--enclosed .v-input__prepend-inner,.v-text-field--enclosed .v-input__prepend-outer,.v-text-field--full-width .v-input__append-inner,.v-text-field--full-width .v-input__append-outer,.v-text-field--full-width .v-input__prepend-inner,.v-text-field--full-width .v-input__prepend-outer{margin-top:17px}.v-text-field--enclosed.v-input--dense:not(.v-text-field--solo) .v-input__append-inner,.v-text-field--enclosed.v-input--dense:not(.v-text-field--solo) .v-input__append-outer,.v-text-field--enclosed.v-input--dense:not(.v-text-field--solo) .v-input__prepend-inner,.v-text-field--enclosed.v-input--dense:not(.v-text-field--solo) .v-input__prepend-outer,.v-text-field--full-width.v-input--dense:not(.v-text-field--solo) .v-input__append-inner,.v-text-field--full-width.v-input--dense:not(.v-text-field--solo) .v-input__append-outer,.v-text-field--full-width.v-input--dense:not(.v-text-field--solo) .v-input__prepend-inner,.v-text-field--full-width.v-input--dense:not(.v-text-field--solo) .v-input__prepend-outer{margin-top:14px}.v-text-field--enclosed.v-input--dense:not(.v-text-field--solo).v-text-field--single-line .v-input__append-inner,.v-text-field--enclosed.v-input--dense:not(.v-text-field--solo).v-text-field--single-line .v-input__append-outer,.v-text-field--enclosed.v-input--dense:not(.v-text-field--solo).v-text-field--single-line .v-input__prepend-inner,.v-text-field--enclosed.v-input--dense:not(.v-text-field--solo).v-text-field--single-line .v-input__prepend-outer,.v-text-field--full-width.v-input--dense:not(.v-text-field--solo).v-text-field--single-line .v-input__append-inner,.v-text-field--full-width.v-input--dense:not(.v-text-field--solo).v-text-field--single-line .v-input__append-outer,.v-text-field--full-width.v-input--dense:not(.v-text-field--solo).v-text-field--single-line .v-input__prepend-inner,.v-text-field--full-width.v-input--dense:not(.v-text-field--solo).v-text-field--single-line .v-input__prepend-outer{margin-top:9px}.v-text-field--enclosed.v-input--dense:not(.v-text-field--solo).v-text-field--outlined .v-input__append-inner,.v-text-field--enclosed.v-input--dense:not(.v-text-field--solo).v-text-field--outlined .v-input__append-outer,.v-text-field--enclosed.v-input--dense:not(.v-text-field--solo).v-text-field--outlined .v-input__prepend-inner,.v-text-field--enclosed.v-input--dense:not(.v-text-field--solo).v-text-field--outlined .v-input__prepend-outer,.v-text-field--full-width.v-input--dense:not(.v-text-field--solo).v-text-field--outlined .v-input__append-inner,.v-text-field--full-width.v-input--dense:not(.v-text-field--solo).v-text-field--outlined .v-input__append-outer,.v-text-field--full-width.v-input--dense:not(.v-text-field--solo).v-text-field--outlined .v-input__prepend-inner,.v-text-field--full-width.v-input--dense:not(.v-text-field--solo).v-text-field--outlined .v-input__prepend-outer{margin-top:8px}.v-text-field--filled .v-label,.v-text-field--full-width .v-label{top:18px}.v-text-field--filled .v-label--active,.v-text-field--full-width .v-label--active{transform:translateY(-6px) scale(.75)}.v-text-field--filled.v-input--dense .v-label,.v-text-field--full-width.v-input--dense .v-label{top:17px}.v-text-field--filled.v-input--dense .v-label--active,.v-text-field--full-width.v-input--dense .v-label--active{transform:translateY(-10px) scale(.75)}.v-text-field--filled.v-input--dense.v-text-field--single-line .v-label,.v-text-field--full-width.v-input--dense.v-text-field--single-line .v-label{top:11px}.v-text-field--filled{border-radius:4px 4px 0 0}.v-text-field--filled:not(.v-text-field--single-line) input{margin-top:22px}.v-text-field--filled.v-input--dense:not(.v-text-field--single-line).v-text-field--outlined input{margin-top:0}.v-text-field--filled .v-text-field__prefix,.v-text-field--filled .v-text-field__suffix{max-height:32px;margin-top:20px}.v-text-field--full-width{border-radius:0}.v-text-field--outlined .v-text-field__slot,.v-text-field--single-line .v-text-field__slot{align-items:center}.v-text-field.v-text-field--enclosed{margin:0;padding:0}.v-text-field.v-text-field--enclosed.v-text-field--single-line .v-text-field__prefix,.v-text-field.v-text-field--enclosed.v-text-field--single-line .v-text-field__suffix{margin-top:0}.v-text-field.v-text-field--enclosed:not(.v-text-field--filled) .v-progress-linear__background{display:none}.v-text-field.v-text-field--enclosed .v-text-field__details,.v-text-field.v-text-field--enclosed:not(.v-text-field--rounded)>.v-input__control>.v-input__slot{padding:0 12px}.v-text-field.v-text-field--enclosed .v-text-field__details{padding-top:0;margin-bottom:8px}.v-application--is-ltr .v-text-field--reverse input{text-align:right}.v-application--is-rtl .v-text-field--reverse input{text-align:left}.v-application--is-ltr .v-text-field--reverse .v-label{transform-origin:top right}.v-application--is-rtl .v-text-field--reverse .v-label{transform-origin:top left}.v-text-field--reverse .v-text-field__slot,.v-text-field--reverse>.v-input__control>.v-input__slot{flex-direction:row-reverse}.v-text-field--outlined>.v-input__control>.v-input__slot:after,.v-text-field--outlined>.v-input__control>.v-input__slot:before,.v-text-field--rounded>.v-input__control>.v-input__slot:after,.v-text-field--rounded>.v-input__control>.v-input__slot:before,.v-text-field--solo>.v-input__control>.v-input__slot:after,.v-text-field--solo>.v-input__control>.v-input__slot:before{display:none}.v-text-field--outlined,.v-text-field--solo{border-radius:4px}.v-text-field--outlined{margin-bottom:16px;transition:border .3s cubic-bezier(.25,.8,.5,1)}.v-text-field--outlined .v-label{top:18px}.v-text-field--outlined .v-label--active{transform:translateY(-24px) scale(.75)}.v-text-field--outlined.v-input--dense .v-label{top:10px}.v-text-field--outlined.v-input--dense .v-label--active{transform:translateY(-16px) scale(.75)}.v-text-field--outlined fieldset{border-collapse:collapse;border-color:currentColor;border-style:solid;border-width:1px;bottom:0;left:0;pointer-events:none;position:absolute;right:0;top:-5px;transition-duration:.15s;transition-property:color;transition-timing-function:cubic-bezier(.25,.8,.25,1)}.v-application--is-ltr .v-text-field--outlined fieldset{padding-left:8px}.v-application--is-ltr .v-text-field--outlined.v-text-field--reverse fieldset,.v-application--is-rtl .v-text-field--outlined fieldset{padding-right:8px}.v-application--is-rtl .v-text-field--outlined.v-text-field--reverse fieldset{padding-left:8px}.v-text-field--outlined legend{line-height:11px;padding:0;transition:width .3s cubic-bezier(.25,.8,.5,1)}.v-application--is-ltr .v-text-field--outlined legend{text-align:left}.v-application--is-rtl .v-text-field--outlined legend{text-align:right}.v-application--is-ltr .v-text-field--outlined.v-text-field--reverse legend{margin-left:auto}.v-application--is-rtl .v-text-field--outlined.v-text-field--reverse legend{margin-right:auto}.v-application--is-ltr .v-text-field--outlined.v-text-field--rounded legend{margin-left:12px}.v-application--is-rtl .v-text-field--outlined.v-text-field--rounded legend{margin-right:12px}.v-text-field--outlined>.v-input__control>.v-input__slot{background:transparent}.v-text-field--outlined .v-text-field__prefix{max-height:32px}.v-text-field--outlined .v-input__append-outer,.v-text-field--outlined .v-input__prepend-outer{margin-top:18px}.v-text-field--outlined.v-input--has-state fieldset,.v-text-field--outlined.v-input--is-focused fieldset{border:2px solid currentColor}.v-text-field--rounded{border-radius:28px}.v-text-field--rounded>.v-input__control>.v-input__slot{padding:0 24px}.v-text-field--shaped{border-radius:16px 16px 0 0}.v-text-field.v-text-field--solo .v-label{top:calc(50% - 9px)}.v-text-field.v-text-field--solo .v-input__control{min-height:48px;padding:0}.v-text-field.v-text-field--solo .v-input__control input{caret-color:auto}.v-text-field.v-text-field--solo.v-input--dense>.v-input__control{min-height:38px}.v-text-field.v-text-field--solo:not(.v-text-field--solo-flat)>.v-input__control>.v-input__slot{box-shadow:0 3px 1px -2px rgba(0,0,0,.2),0 2px 2px 0 rgba(0,0,0,.14),0 1px 5px 0 rgba(0,0,0,.12)}.v-text-field.v-text-field--solo .v-input__append-inner,.v-text-field.v-text-field--solo .v-input__prepend-inner{align-self:center;margin-top:0}.v-text-field.v-text-field--solo .v-input__append-outer,.v-text-field.v-text-field--solo .v-input__prepend-outer{margin-top:12px}.v-text-field.v-text-field--solo.v-input--dense .v-input__append-outer,.v-text-field.v-text-field--solo.v-input--dense .v-input__prepend-outer{margin-top:7px}.v-text-field.v-input--is-focused>.v-input__control>.v-input__slot:after{transform:scaleX(1)}.v-text-field.v-input--has-state>.v-input__control>.v-input__slot:before{border-color:currentColor}.theme--light.v-counter{color:rgba(0,0,0,.6)}.theme--dark.v-counter{color:hsla(0,0%,100%,.7)}.v-counter{flex:0 1 auto;font-size:12px;min-height:12px;line-height:12px}.theme--light.v-data-table{background-color:#fff;color:rgba(0,0,0,.87)}.theme--light.v-data-table .v-data-table__divider{border-right:thin solid rgba(0,0,0,.12)}.theme--light.v-data-table.v-data-table--fixed-header thead th{background:#fff;box-shadow:inset 0 -1px 0 rgba(0,0,0,.12)}.theme--light.v-data-table>.v-data-table__wrapper>table>thead>tr>th{color:rgba(0,0,0,.6)}.theme--light.v-data-table>.v-data-table__wrapper>table>tbody>tr:not(:last-child)>td:last-child,.theme--light.v-data-table>.v-data-table__wrapper>table>tbody>tr:not(:last-child)>td:not(.v-data-table__mobile-row),.theme--light.v-data-table>.v-data-table__wrapper>table>tbody>tr:not(:last-child)>th:last-child,.theme--light.v-data-table>.v-data-table__wrapper>table>tbody>tr:not(:last-child)>th:not(.v-data-table__mobile-row),.theme--light.v-data-table>.v-data-table__wrapper>table>thead>tr:last-child>th{border-bottom:thin solid rgba(0,0,0,.12)}.theme--light.v-data-table>.v-data-table__wrapper>table>tbody>tr.active{background:#f5f5f5}.theme--light.v-data-table>.v-data-table__wrapper>table>tbody>tr:hover:not(.v-data-table__expanded__content):not(.v-data-table__empty-wrapper){background:#eee}.theme--light.v-data-table>.v-data-table__wrapper>table>tfoot>tr>td:not(.v-data-table__mobile-row),.theme--light.v-data-table>.v-data-table__wrapper>table>tfoot>tr>th:not(.v-data-table__mobile-row){border-top:thin solid rgba(0,0,0,.12)}.theme--dark.v-data-table{background-color:#1e1e1e;color:#fff}.theme--dark.v-data-table .v-data-table__divider{border-right:thin solid hsla(0,0%,100%,.12)}.theme--dark.v-data-table.v-data-table--fixed-header thead th{background:#1e1e1e;box-shadow:inset 0 -1px 0 hsla(0,0%,100%,.12)}.theme--dark.v-data-table>.v-data-table__wrapper>table>thead>tr>th{color:hsla(0,0%,100%,.7)}.theme--dark.v-data-table>.v-data-table__wrapper>table>tbody>tr:not(:last-child)>td:last-child,.theme--dark.v-data-table>.v-data-table__wrapper>table>tbody>tr:not(:last-child)>td:not(.v-data-table__mobile-row),.theme--dark.v-data-table>.v-data-table__wrapper>table>tbody>tr:not(:last-child)>th:last-child,.theme--dark.v-data-table>.v-data-table__wrapper>table>tbody>tr:not(:last-child)>th:not(.v-data-table__mobile-row),.theme--dark.v-data-table>.v-data-table__wrapper>table>thead>tr:last-child>th{border-bottom:thin solid hsla(0,0%,100%,.12)}.theme--dark.v-data-table>.v-data-table__wrapper>table>tbody>tr.active{background:#505050}.theme--dark.v-data-table>.v-data-table__wrapper>table>tbody>tr:hover:not(.v-data-table__expanded__content):not(.v-data-table__empty-wrapper){background:#616161}.theme--dark.v-data-table>.v-data-table__wrapper>table>tfoot>tr>td:not(.v-data-table__mobile-row),.theme--dark.v-data-table>.v-data-table__wrapper>table>tfoot>tr>th:not(.v-data-table__mobile-row){border-top:thin solid hsla(0,0%,100%,.12)}.v-data-table{line-height:1.5;max-width:100%}.v-data-table>.v-data-table__wrapper>table{width:100%;border-spacing:0}.v-data-table>.v-data-table__wrapper>table>tbody>tr>td,.v-data-table>.v-data-table__wrapper>table>tbody>tr>th,.v-data-table>.v-data-table__wrapper>table>tfoot>tr>td,.v-data-table>.v-data-table__wrapper>table>tfoot>tr>th,.v-data-table>.v-data-table__wrapper>table>thead>tr>td,.v-data-table>.v-data-table__wrapper>table>thead>tr>th{padding:0 16px;transition:height .2s cubic-bezier(.4,0,.6,1)}.v-data-table>.v-data-table__wrapper>table>tbody>tr>th,.v-data-table>.v-data-table__wrapper>table>tfoot>tr>th,.v-data-table>.v-data-table__wrapper>table>thead>tr>th{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;font-size:.75rem;height:48px}.v-application--is-ltr .v-data-table>.v-data-table__wrapper>table>tbody>tr>th,.v-application--is-ltr .v-data-table>.v-data-table__wrapper>table>tfoot>tr>th,.v-application--is-ltr .v-data-table>.v-data-table__wrapper>table>thead>tr>th{text-align:left}.v-application--is-rtl .v-data-table>.v-data-table__wrapper>table>tbody>tr>th,.v-application--is-rtl .v-data-table>.v-data-table__wrapper>table>tfoot>tr>th,.v-application--is-rtl .v-data-table>.v-data-table__wrapper>table>thead>tr>th{text-align:right}.v-data-table>.v-data-table__wrapper>table>tbody>tr>td,.v-data-table>.v-data-table__wrapper>table>tfoot>tr>td,.v-data-table>.v-data-table__wrapper>table>thead>tr>td{font-size:.875rem;height:48px}.v-data-table__wrapper{overflow-x:auto;overflow-y:hidden}.v-data-table__progress{height:auto!important}.v-data-table__progress th{height:auto!important;border:none!important;padding:0;position:relative}.v-data-table--dense>.v-data-table__wrapper>table>tbody>tr>td,.v-data-table--dense>.v-data-table__wrapper>table>tbody>tr>th,.v-data-table--dense>.v-data-table__wrapper>table>tfoot>tr>td,.v-data-table--dense>.v-data-table__wrapper>table>tfoot>tr>th,.v-data-table--dense>.v-data-table__wrapper>table>thead>tr>td,.v-data-table--dense>.v-data-table__wrapper>table>thead>tr>th{height:32px}.v-data-table--has-top>.v-data-table__wrapper>table>tbody>tr:first-child:hover>td:first-child{border-top-left-radius:0}.v-data-table--has-top>.v-data-table__wrapper>table>tbody>tr:first-child:hover>td:last-child{border-top-right-radius:0}.v-data-table--has-bottom>.v-data-table__wrapper>table>tbody>tr:last-child:hover>td:first-child{border-bottom-left-radius:0}.v-data-table--has-bottom>.v-data-table__wrapper>table>tbody>tr:last-child:hover>td:last-child{border-bottom-right-radius:0}.v-data-table--fixed-header>.v-data-table__wrapper,.v-data-table--fixed-height .v-data-table__wrapper{overflow-y:auto}.v-data-table--fixed-header>.v-data-table__wrapper>table>thead>tr>th{border-bottom:0!important;position:sticky;top:0;z-index:2}.v-data-table--fixed-header>.v-data-table__wrapper>table>thead>tr:nth-child(2)>th{top:48px}.v-application--is-ltr .v-data-table--fixed-header .v-data-footer{margin-right:17px}.v-application--is-rtl .v-data-table--fixed-header .v-data-footer{margin-left:17px}.v-data-table--fixed-header.v-data-table--dense>.v-data-table__wrapper>table>thead>tr:nth-child(2)>th{top:32px}.theme--light.v-slider .v-slider__thumb,.theme--light.v-slider .v-slider__track-background,.theme--light.v-slider .v-slider__track-fill{background:rgba(0,0,0,.26)}.theme--dark.v-slider .v-slider__thumb,.theme--dark.v-slider .v-slider__track-background,.theme--dark.v-slider .v-slider__track-fill{background:hsla(0,0%,100%,.2)}.v-slider{cursor:default;display:flex;align-items:center;position:relative;flex:1;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.v-slider input{cursor:default;padding:0;width:100%;display:none}.v-slider__track-container{position:absolute;border-radius:0}.v-slider__thumb-container,.v-slider__track-background,.v-slider__track-fill{position:absolute;transition:.3s cubic-bezier(.25,.8,.5,1)}.v-slider__thumb-container{outline:none;top:50%}.v-slider__thumb-container:hover .v-slider__thumb:before{transform:scale(1)}.v-slider__thumb{width:12px;height:12px;left:-6px;top:50%;transform:translateY(-50%);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.v-slider__thumb,.v-slider__thumb:before{position:absolute;border-radius:50%;transition:.3s cubic-bezier(.25,.8,.5,1)}.v-slider__thumb:before{content:"";color:inherit;width:36px;height:36px;background:currentColor;opacity:.3;left:-12px;top:-12px;transform:scale(.1);pointer-events:none}.v-slider__thumb:after{content:"";width:42px;height:42px;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.v-slider__tick,.v-slider__ticks-container{position:absolute}.v-slider__tick{opacity:0;background-color:rgba(0,0,0,.5);transition:.3s cubic-bezier(.25,.8,.5,1);border-radius:0}.v-slider__tick--filled{background-color:hsla(0,0%,100%,.5)}.v-application--is-ltr .v-slider__tick:first-child .v-slider__tick-label{transform:none}.v-application--is-rtl .v-slider__tick:first-child .v-slider__tick-label{transform:translateX(100%)}.v-application--is-ltr .v-slider__tick:last-child .v-slider__tick-label{transform:translateX(-100%)}.v-application--is-rtl .v-slider__tick:last-child .v-slider__tick-label{transform:none}.v-slider__tick-label{position:absolute;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;white-space:nowrap}.v-slider__thumb-label-container{top:0}.v-slider__thumb-label,.v-slider__thumb-label-container{position:absolute;left:0;transition:.3s cubic-bezier(.25,.8,.25,1)}.v-slider__thumb-label{display:flex;align-items:center;justify-content:center;font-size:.75rem;color:#fff;width:32px;height:32px;border-radius:50% 50% 0;bottom:100%;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.v-slider--horizontal{min-height:32px;margin-left:8px;margin-right:8px}.v-slider--horizontal .v-slider__track-container{width:100%;height:2px;left:0;top:50%;transform:translateY(-50%)}.v-slider--horizontal .v-slider__track-background,.v-slider--horizontal .v-slider__track-fill{height:100%}.v-slider--horizontal .v-slider__ticks-container{left:0;height:2px;width:100%}.v-application--is-ltr .v-slider--horizontal .v-slider__tick:first-child .v-slider__tick-label,.v-application--is-rtl .v-slider--horizontal .v-slider__tick:first-child .v-slider__tick-label{transform:translateX(0)}.v-application--is-ltr .v-slider--horizontal .v-slider__tick:last-child .v-slider__tick-label{transform:translateX(-100%)}.v-application--is-rtl .v-slider--horizontal .v-slider__tick:last-child .v-slider__tick-label{transform:translateX(100%)}.v-slider--horizontal .v-slider__tick .v-slider__tick-label{top:8px}.v-application--is-ltr .v-slider--horizontal .v-slider__tick .v-slider__tick-label{transform:translateX(-50%)}.v-application--is-rtl .v-slider--horizontal .v-slider__tick .v-slider__tick-label{transform:translateX(50%)}.v-slider--horizontal .v-slider__thumb-label{transform:translateY(-20%) translateY(-12px) translateX(-50%) rotate(45deg)}.v-slider--horizontal .v-slider__thumb-label>*{transform:rotate(-45deg)}.v-slider--vertical{min-height:150px;margin-top:12px;margin-bottom:12px}.v-slider--vertical .v-slider__track-container{height:100%;width:2px;left:50%;top:0;transform:translateX(-50%)}.v-slider--vertical .v-slider__track-background,.v-slider--vertical .v-slider__track-fill{width:100%}.v-slider--vertical .v-slider__thumb-container{left:50%}.v-slider--vertical .v-slider__ticks-container{top:0;width:2px;height:100%;left:50%;transform:translateX(-50%)}.v-application--is-ltr .v-slider--vertical .v-slider__tick .v-slider__tick-label,.v-application--is-ltr .v-slider--vertical .v-slider__tick:first-child .v-slider__tick-label,.v-application--is-ltr .v-slider--vertical .v-slider__tick:last-child .v-slider__tick-label{transform:translateY(-50%);left:12px}.v-application--is-rtl .v-slider--vertical .v-slider__tick .v-slider__tick-label,.v-application--is-rtl .v-slider--vertical .v-slider__tick:first-child .v-slider__tick-label,.v-application--is-rtl .v-slider--vertical .v-slider__tick:last-child .v-slider__tick-label{transform:translateY(-50%);right:12px}.v-slider--vertical .v-slider__thumb-label>*{transform:rotate(-135deg)}.v-slider__thumb-container--focused .v-slider__thumb:before{transform:scale(1)}.v-slider--active .v-slider__tick{opacity:1}.v-slider__thumb-container--active .v-slider__thumb:before{transform:scale(1.5)!important}.v-slider--disabled{pointer-events:none}.v-slider--disabled .v-slider__thumb{width:8px;height:8px;left:-4px}.v-slider--disabled .v-slider__thumb:before{display:none}.v-slider__ticks-container--always-show .v-slider__tick{opacity:1}.v-input__slider.v-input--is-readonly>.v-input__control{pointer-events:none}.v-application--is-ltr .v-input__slider .v-input__slot .v-label{margin-left:0;margin-right:12px}.v-application--is-ltr .v-input__slider--inverse-label .v-input__slot .v-label,.v-application--is-rtl .v-input__slider .v-input__slot .v-label{margin-right:0;margin-left:12px}.v-application--is-rtl .v-input__slider--inverse-label .v-input__slot .v-label{margin-left:0;margin-right:12px}.v-input__slider--vertical{align-items:center}.v-application--is-ltr .v-input__slider--vertical{flex-direction:column-reverse}.v-application--is-rtl .v-input__slider--vertical{flex-direction:column}.v-input__slider--vertical .v-input__append-outer,.v-input__slider--vertical .v-input__prepend-outer,.v-input__slider--vertical .v-input__slot{margin:0}.v-input__slider--vertical .v-messages{display:none}.v-input--has-state .v-slider__track-background{opacity:.4}.theme--light.v-select .v-select__selections{color:rgba(0,0,0,.87);min-height:10px}.theme--light.v-select.v-input--is-disabled .v-select__selections,.theme--light.v-select .v-select__selection--disabled{color:rgba(0,0,0,.38)}.theme--light.v-select.v-text-field--solo-inverted.v-input--is-focused .v-select__selections{color:#fff}.theme--dark.v-select .v-select__selections{color:#fff;min-height:10px}.theme--dark.v-select.v-input--is-disabled .v-select__selections,.theme--dark.v-select .v-select__selection--disabled{color:hsla(0,0%,100%,.5)}.theme--dark.v-select.v-text-field--solo-inverted.v-input--is-focused .v-select__selections{color:rgba(0,0,0,.87)}.v-select:not(.v-select--is-multi).v-text-field--single-line .v-select__selections{flex-wrap:nowrap}.v-select>.v-input__control>.v-input__slot{cursor:pointer}.v-select .v-chip{flex:0 1 auto;margin:4px}.v-select .v-chip--selected:after{opacity:.22}.v-select .fade-transition-leave-active{position:absolute;left:0}.v-select.v-input--is-dirty ::-moz-placeholder{color:transparent!important}.v-select.v-input--is-dirty :-ms-input-placeholder{color:transparent!important}.v-select.v-input--is-dirty ::placeholder{color:transparent!important}.v-select:not(.v-input--is-dirty):not(.v-input--is-focused) .v-text-field__prefix{line-height:20px;top:7px;transition:.3s cubic-bezier(.25,.8,.5,1)}.v-select.v-text-field--enclosed:not(.v-text-field--single-line):not(.v-text-field--outlined) .v-select__selections{padding-top:20px}.v-select.v-text-field--outlined:not(.v-text-field--single-line) .v-select__selections{padding:8px 0}.v-select.v-text-field--outlined:not(.v-text-field--single-line).v-input--dense .v-select__selections{padding:4px 0}.v-select.v-text-field input{flex:1 1;min-width:0;pointer-events:none;position:relative}.v-select.v-text-field:not(.v-text-field--single-line) input{margin-top:0}.v-select.v-select--is-menu-active .v-input__icon--append .v-icon{transform:rotate(180deg)}.v-select.v-select--chips input{margin:0}.v-select.v-select--chips .v-select__selections{min-height:42px}.v-select.v-select--chips.v-input--dense .v-select__selections{min-height:40px}.v-select.v-select--chips .v-chip--select.v-chip--active:before{opacity:.2}.v-select.v-select--chips.v-select--chips--small .v-select__selections{min-height:26px}.v-select.v-select--chips:not(.v-text-field--single-line).v-text-field--box .v-select__selections,.v-select.v-select--chips:not(.v-text-field--single-line).v-text-field--enclosed .v-select__selections{min-height:68px}.v-select.v-select--chips:not(.v-text-field--single-line).v-text-field--box.v-input--dense .v-select__selections,.v-select.v-select--chips:not(.v-text-field--single-line).v-text-field--enclosed.v-input--dense .v-select__selections{min-height:40px}.v-select.v-select--chips:not(.v-text-field--single-line).v-text-field--box.v-select--chips--small .v-select__selections,.v-select.v-select--chips:not(.v-text-field--single-line).v-text-field--enclosed.v-select--chips--small .v-select__selections{min-height:26px}.v-select.v-select--chips:not(.v-text-field--single-line).v-text-field--box.v-select--chips--small.v-input--dense .v-select__selections,.v-select.v-select--chips:not(.v-text-field--single-line).v-text-field--enclosed.v-select--chips--small.v-input--dense .v-select__selections{min-height:38px}.v-select.v-text-field--reverse .v-select__selections,.v-select.v-text-field--reverse .v-select__slot{flex-direction:row-reverse}.v-select__selections{align-items:center;display:flex;flex:1 1;flex-wrap:wrap;line-height:18px;max-width:100%;min-width:0}.v-select__selection{max-width:90%}.v-select__selection--comma{margin:7px 4px 7px 0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.v-select.v-input--dense .v-select__selection--comma{margin:5px 4px 3px 0}.v-select.v-input--dense .v-chip{margin:0 4px 0 4px}.v-select__slot{position:relative;align-items:center;display:flex;max-width:100%;min-width:0;width:100%}.v-select:not(.v-text-field--single-line):not(.v-text-field--outlined) .v-select__slot>input{align-self:flex-end}.theme--light.v-list-item--disabled{color:rgba(0,0,0,.38)}.theme--light.v-list-item:not(.v-list-item--active):not(.v-list-item--disabled){color:rgba(0,0,0,.87)}.theme--light.v-list-item .v-list-item__mask{color:rgba(0,0,0,.38);background:#eee}.theme--light.v-list-item .v-list-item__action-text,.theme--light.v-list-item .v-list-item__subtitle{color:rgba(0,0,0,.6)}.theme--light.v-list-item:hover:before{opacity:.04}.theme--light.v-list-item--active:before,.theme--light.v-list-item--active:hover:before,.theme--light.v-list-item:focus:before{opacity:.12}.theme--light.v-list-item--active:focus:before,.theme--light.v-list-item.v-list-item--highlighted:before{opacity:.16}.theme--dark.v-list-item--disabled{color:hsla(0,0%,100%,.5)}.theme--dark.v-list-item:not(.v-list-item--active):not(.v-list-item--disabled){color:#fff}.theme--dark.v-list-item .v-list-item__mask{color:hsla(0,0%,100%,.5);background:#494949}.theme--dark.v-list-item .v-list-item__action-text,.theme--dark.v-list-item .v-list-item__subtitle{color:hsla(0,0%,100%,.7)}.theme--dark.v-list-item:hover:before{opacity:.08}.theme--dark.v-list-item--active:before,.theme--dark.v-list-item--active:hover:before,.theme--dark.v-list-item:focus:before{opacity:.24}.theme--dark.v-list-item--active:focus:before,.theme--dark.v-list-item.v-list-item--highlighted:before{opacity:.32}.v-list-item{align-items:center;display:flex;flex:1 1 100%;letter-spacing:normal;min-height:48px;outline:none;padding:0 16px;position:relative;text-decoration:none}.v-list-item--disabled{pointer-events:none}.v-list-item--selectable{-webkit-user-select:auto;-moz-user-select:auto;-ms-user-select:auto;user-select:auto}.v-list-item:after{content:"";min-height:inherit;font-size:0}.v-list-item__action{align-self:center;margin:12px 0}.v-list-item__action .v-input,.v-list-item__action .v-input--selection-controls__input,.v-list-item__action .v-input__control,.v-list-item__action .v-input__slot{margin:0!important}.v-list-item__action .v-input{padding:0}.v-list-item__action .v-input .v-messages{display:none}.v-list-item__action-text{font-size:.75rem}.v-list-item__avatar{align-self:center;justify-content:flex-start}.v-list-item__avatar,.v-list-item__avatar.v-list-item__avatar--horizontal{margin-bottom:8px;margin-top:8px}.v-application--is-ltr .v-list-item__avatar.v-list-item__avatar--horizontal:first-child{margin-left:-16px}.v-application--is-rtl .v-list-item__avatar.v-list-item__avatar--horizontal:first-child{margin-right:-16px}.v-application--is-ltr .v-list-item__avatar.v-list-item__avatar--horizontal:last-child{margin-left:-16px}.v-application--is-rtl .v-list-item__avatar.v-list-item__avatar--horizontal:last-child{margin-right:-16px}.v-list-item__content{align-items:center;align-self:center;display:flex;flex-wrap:wrap;flex:1 1;overflow:hidden;padding:12px 0}.v-list-item__content>*{line-height:1.1;flex:1 0 100%}.v-list-item__content>:not(:last-child){margin-bottom:2px}.v-list-item__icon{align-self:flex-start;margin:16px 0}.v-application--is-ltr .v-list-item__action:last-of-type:not(:only-child),.v-application--is-ltr .v-list-item__avatar:last-of-type:not(:only-child),.v-application--is-ltr .v-list-item__icon:last-of-type:not(:only-child){margin-left:16px}.v-application--is-ltr .v-list-item__avatar:first-child,.v-application--is-rtl .v-list-item__action:last-of-type:not(:only-child),.v-application--is-rtl .v-list-item__avatar:last-of-type:not(:only-child),.v-application--is-rtl .v-list-item__icon:last-of-type:not(:only-child){margin-right:16px}.v-application--is-rtl .v-list-item__avatar:first-child{margin-left:16px}.v-application--is-ltr .v-list-item__action:first-child,.v-application--is-ltr .v-list-item__icon:first-child{margin-right:32px}.v-application--is-rtl .v-list-item__action:first-child,.v-application--is-rtl .v-list-item__icon:first-child{margin-left:32px}.v-list-item__action,.v-list-item__avatar,.v-list-item__icon{display:inline-flex;min-width:24px}.v-list-item .v-list-item__subtitle,.v-list-item .v-list-item__title{line-height:1.2}.v-list-item__subtitle,.v-list-item__title{flex:1 1 100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.v-list-item__title{align-self:center;font-size:1rem}.v-list-item__title>.v-badge{margin-top:16px}.v-list-item__subtitle{font-size:.875rem}.v-list--dense .v-list-item,.v-list-item--dense{min-height:40px}.v-list--dense .v-list-item .v-list-item__icon,.v-list-item--dense .v-list-item__icon{height:24px;margin-top:8px;margin-bottom:8px}.v-list--dense .v-list-item .v-list-item__content,.v-list-item--dense .v-list-item__content{padding:8px 0}.v-list--dense .v-list-item .v-list-item__subtitle,.v-list--dense .v-list-item .v-list-item__title,.v-list-item--dense .v-list-item__subtitle,.v-list-item--dense .v-list-item__title{font-size:.8125rem;font-weight:500;line-height:1rem}.v-list--dense .v-list-item.v-list-item--two-line,.v-list-item--dense.v-list-item--two-line{min-height:60px}.v-list--dense .v-list-item.v-list-item--three-line,.v-list-item--dense.v-list-item--three-line{min-height:76px}.v-list-item--link{cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.v-list-item--link:before{background-color:currentColor;bottom:0;content:"";left:0;opacity:0;pointer-events:none;position:absolute;right:0;top:0;transition:.3s cubic-bezier(.25,.8,.5,1)}.v-list .v-list-item--active,.v-list .v-list-item--active .v-icon{color:inherit}.v-list-item__action--stack{align-items:flex-end;align-self:stretch;justify-content:space-between;white-space:nowrap;flex-direction:column}.v-list--three-line .v-list-item .v-list-item__avatar:not(.v-list-item__avatar--horizontal),.v-list--three-line .v-list-item .v-list-item__icon,.v-list--two-line .v-list-item .v-list-item__avatar:not(.v-list-item__avatar--horizontal),.v-list--two-line .v-list-item .v-list-item__icon,.v-list-item--three-line .v-list-item__avatar:not(.v-list-item__avatar--horizontal),.v-list-item--three-line .v-list-item__icon,.v-list-item--two-line .v-list-item__avatar:not(.v-list-item__avatar--horizontal),.v-list-item--two-line .v-list-item__icon{margin-bottom:16px;margin-top:16px}.v-list--two-line .v-list-item,.v-list-item--two-line{min-height:64px}.v-list--two-line .v-list-item .v-list-item__icon,.v-list-item--two-line .v-list-item__icon{margin-bottom:32px}.v-list--three-line .v-list-item,.v-list-item--three-line{min-height:88px}.v-list--three-line .v-list-item .v-list-item__action,.v-list--three-line .v-list-item .v-list-item__avatar,.v-list-item--three-line .v-list-item__action,.v-list-item--three-line .v-list-item__avatar{align-self:flex-start;margin-top:16px;margin-bottom:16px}.v-list--three-line .v-list-item .v-list-item__content,.v-list-item--three-line .v-list-item__content{align-self:stretch}.v-list--three-line .v-list-item .v-list-item__subtitle,.v-list-item--three-line .v-list-item__subtitle{white-space:normal;-webkit-line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box}.v-simple-checkbox{align-self:center;line-height:normal;position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.v-simple-checkbox .v-icon{cursor:pointer}.v-simple-checkbox--disabled{cursor:default}.theme--light.v-subheader{color:rgba(0,0,0,.6)}.theme--dark.v-subheader{color:hsla(0,0%,100%,.7)}.v-subheader{align-items:center;display:flex;height:48px;font-size:.875rem;font-weight:400;padding:0 16px 0 16px}.v-subheader--inset{margin-left:56px}.v-list.accent>.v-list-item,.v-list.error>.v-list-item,.v-list.info>.v-list-item,.v-list.primary>.v-list-item,.v-list.secondary>.v-list-item,.v-list.success>.v-list-item,.v-list.warning>.v-list-item{color:#fff}.theme--light.v-list{background:#fff;color:rgba(0,0,0,.87)}.theme--light.v-list .v-list--disabled{color:rgba(0,0,0,.38)}.theme--light.v-list .v-list-group--active:after,.theme--light.v-list .v-list-group--active:before{background:rgba(0,0,0,.12)}.theme--dark.v-list{background:#1e1e1e;color:#fff}.theme--dark.v-list .v-list--disabled{color:hsla(0,0%,100%,.5)}.theme--dark.v-list .v-list-group--active:after,.theme--dark.v-list .v-list-group--active:before{background:hsla(0,0%,100%,.12)}.v-sheet.v-list{border-radius:0}.v-sheet.v-list:not(.v-sheet--outlined){box-shadow:0 0 0 0 rgba(0,0,0,.2),0 0 0 0 rgba(0,0,0,.14),0 0 0 0 rgba(0,0,0,.12)}.v-sheet.v-list.v-sheet--shaped{border-radius:0}.v-list{display:block;padding:8px 0;position:static;transition:box-shadow .28s cubic-bezier(.4,0,.2,1)}.v-list--disabled{pointer-events:none}.v-list--flat .v-list-item:before{display:none}.v-list--dense .v-subheader{font-size:.75rem;height:40px;padding:0 8px}.v-list--nav .v-list-item:not(:last-child):not(:only-child),.v-list--rounded .v-list-item:not(:last-child):not(:only-child){margin-bottom:8px}.v-list--nav.v-list--dense .v-list-item:not(:last-child):not(:only-child),.v-list--nav .v-list-item--dense:not(:last-child):not(:only-child),.v-list--rounded.v-list--dense .v-list-item:not(:last-child):not(:only-child),.v-list--rounded .v-list-item--dense:not(:last-child):not(:only-child){margin-bottom:4px}.v-list--nav{padding-left:8px;padding-right:8px}.v-list--nav .v-list-item{padding:0 8px}.v-list--nav .v-list-item,.v-list--nav .v-list-item:before{border-radius:4px}.v-application--is-ltr .v-list.v-sheet--shaped .v-list-item,.v-application--is-ltr .v-list.v-sheet--shaped .v-list-item:before,.v-application--is-ltr .v-list.v-sheet--shaped .v-list-item>.v-ripple__container{border-bottom-right-radius:32px!important;border-top-right-radius:32px!important}.v-application--is-rtl .v-list.v-sheet--shaped .v-list-item,.v-application--is-rtl .v-list.v-sheet--shaped .v-list-item:before,.v-application--is-rtl .v-list.v-sheet--shaped .v-list-item>.v-ripple__container{border-bottom-left-radius:32px!important;border-top-left-radius:32px!important}.v-application--is-ltr .v-list.v-sheet--shaped.v-list--two-line .v-list-item,.v-application--is-ltr .v-list.v-sheet--shaped.v-list--two-line .v-list-item:before,.v-application--is-ltr .v-list.v-sheet--shaped.v-list--two-line .v-list-item>.v-ripple__container{border-bottom-right-radius:42.6666666667px!important;border-top-right-radius:42.6666666667px!important}.v-application--is-rtl .v-list.v-sheet--shaped.v-list--two-line .v-list-item,.v-application--is-rtl .v-list.v-sheet--shaped.v-list--two-line .v-list-item:before,.v-application--is-rtl .v-list.v-sheet--shaped.v-list--two-line .v-list-item>.v-ripple__container{border-bottom-left-radius:42.6666666667px!important;border-top-left-radius:42.6666666667px!important}.v-application--is-ltr .v-list.v-sheet--shaped.v-list--three-line .v-list-item,.v-application--is-ltr .v-list.v-sheet--shaped.v-list--three-line .v-list-item:before,.v-application--is-ltr .v-list.v-sheet--shaped.v-list--three-line .v-list-item>.v-ripple__container{border-bottom-right-radius:58.6666666667px!important;border-top-right-radius:58.6666666667px!important}.v-application--is-rtl .v-list.v-sheet--shaped.v-list--three-line .v-list-item,.v-application--is-rtl .v-list.v-sheet--shaped.v-list--three-line .v-list-item:before,.v-application--is-rtl .v-list.v-sheet--shaped.v-list--three-line .v-list-item>.v-ripple__container{border-bottom-left-radius:58.6666666667px!important;border-top-left-radius:58.6666666667px!important}.v-application--is-ltr .v-list.v-sheet--shaped{padding-right:8px}.v-application--is-rtl .v-list.v-sheet--shaped{padding-left:8px}.v-list--rounded{padding:8px}.v-list--rounded .v-list-item,.v-list--rounded .v-list-item:before,.v-list--rounded .v-list-item>.v-ripple__container{border-radius:32px!important}.v-list--rounded.v-list--two-line .v-list-item,.v-list--rounded.v-list--two-line .v-list-item:before,.v-list--rounded.v-list--two-line .v-list-item>.v-ripple__container{border-radius:42.6666666667px!important}.v-list--rounded.v-list--three-line .v-list-item,.v-list--rounded.v-list--three-line .v-list-item:before,.v-list--rounded.v-list--three-line .v-list-item>.v-ripple__container{border-radius:58.6666666667px!important}.v-list--subheader{padding-top:0}.v-list-group .v-list-group__header .v-list-item__icon.v-list-group__header__append-icon{align-self:center;margin:0;min-width:48px;justify-content:flex-end}.v-list-group--sub-group{align-items:center;display:flex;flex-wrap:wrap}.v-list-group__header.v-list-item--active:not(:hover):not(:focus):before{opacity:0}.v-list-group__items{flex:1 1 auto}.v-list-group__items .v-list-group__items,.v-list-group__items .v-list-item{overflow:hidden}.v-list-group--active>.v-list-group__header.v-list-group__header--sub-group>.v-list-group__header__prepend-icon .v-icon,.v-list-group--active>.v-list-group__header>.v-list-group__header__append-icon .v-icon{transform:rotate(-180deg)}.v-list-group--active>.v-list-group__header .v-list-group__header__prepend-icon .v-icon,.v-list-group--active>.v-list-group__header .v-list-item,.v-list-group--active>.v-list-group__header .v-list-item__content{color:inherit}.v-application--is-ltr .v-list-group--sub-group .v-list-item__action:first-child,.v-application--is-ltr .v-list-group--sub-group .v-list-item__avatar:first-child,.v-application--is-ltr .v-list-group--sub-group .v-list-item__icon:first-child{margin-right:16px}.v-application--is-rtl .v-list-group--sub-group .v-list-item__action:first-child,.v-application--is-rtl .v-list-group--sub-group .v-list-item__avatar:first-child,.v-application--is-rtl .v-list-group--sub-group .v-list-item__icon:first-child{margin-left:16px}.v-application--is-ltr .v-list-group--sub-group .v-list-group__header{padding-left:32px}.v-application--is-rtl .v-list-group--sub-group .v-list-group__header{padding-right:32px}.v-application--is-ltr .v-list-group--sub-group .v-list-group__items .v-list-item{padding-left:40px}.v-application--is-rtl .v-list-group--sub-group .v-list-group__items .v-list-item{padding-right:40px}.v-list-group--sub-group.v-list-group--active .v-list-item__icon.v-list-group__header__prepend-icon .v-icon{transform:rotate(-180deg)}.v-application--is-ltr .v-list-group--no-action>.v-list-group__items>.v-list-item{padding-left:72px}.v-application--is-rtl .v-list-group--no-action>.v-list-group__items>.v-list-item{padding-right:72px}.v-application--is-ltr .v-list-group--no-action.v-list-group--sub-group>.v-list-group__items>.v-list-item{padding-left:88px}.v-application--is-rtl .v-list-group--no-action.v-list-group--sub-group>.v-list-group__items>.v-list-item{padding-right:88px}.v-application--is-ltr .v-list--dense .v-list-group--sub-group .v-list-group__header{padding-left:24px}.v-application--is-rtl .v-list--dense .v-list-group--sub-group .v-list-group__header{padding-right:24px}.v-application--is-ltr .v-list--dense.v-list--nav .v-list-group--no-action>.v-list-group__items>.v-list-item{padding-left:64px}.v-application--is-rtl .v-list--dense.v-list--nav .v-list-group--no-action>.v-list-group__items>.v-list-item{padding-right:64px}.v-application--is-ltr .v-list--dense.v-list--nav .v-list-group--no-action.v-list-group--sub-group>.v-list-group__items>.v-list-item{padding-left:80px}.v-application--is-rtl .v-list--dense.v-list--nav .v-list-group--no-action.v-list-group--sub-group>.v-list-group__items>.v-list-item{padding-right:80px}.v-avatar{align-items:center;border-radius:50%;display:inline-flex;justify-content:center;line-height:normal;position:relative;text-align:center;vertical-align:middle;overflow:hidden}.v-avatar .v-icon,.v-avatar .v-image,.v-avatar .v-responsive__content,.v-avatar img,.v-avatar svg{border-radius:inherit;display:inline-flex;height:inherit;width:inherit}.v-list-item-group .v-list-item--active{color:inherit}.v-item-group{flex:0 1 auto;position:relative;max-width:100%;transition:.3s cubic-bezier(.25,.8,.5,1)}.v-chip:not(.v-chip--outlined).accent,.v-chip:not(.v-chip--outlined).error,.v-chip:not(.v-chip--outlined).info,.v-chip:not(.v-chip--outlined).primary,.v-chip:not(.v-chip--outlined).secondary,.v-chip:not(.v-chip--outlined).success,.v-chip:not(.v-chip--outlined).warning{color:#fff}.theme--light.v-chip{border-color:rgba(0,0,0,.12);color:rgba(0,0,0,.87)}.theme--light.v-chip:not(.v-chip--active){background:#e0e0e0}.theme--light.v-chip:hover:before{opacity:.04}.theme--light.v-chip--active:before,.theme--light.v-chip--active:hover:before,.theme--light.v-chip:focus:before{opacity:.12}.theme--light.v-chip--active:focus:before{opacity:.16}.theme--dark.v-chip{border-color:hsla(0,0%,100%,.12);color:#fff}.theme--dark.v-chip:not(.v-chip--active){background:#555}.theme--dark.v-chip:hover:before{opacity:.08}.theme--dark.v-chip--active:before,.theme--dark.v-chip--active:hover:before,.theme--dark.v-chip:focus:before{opacity:.24}.theme--dark.v-chip--active:focus:before{opacity:.32}.v-chip{align-items:center;cursor:default;display:inline-flex;line-height:20px;max-width:100%;outline:none;overflow:hidden;padding:0 12px;position:relative;text-decoration:none;transition-duration:.28s;transition-property:box-shadow,opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);vertical-align:middle;white-space:nowrap}.v-chip:before{background-color:currentColor;bottom:0;border-radius:inherit;content:"";left:0;opacity:0;position:absolute;pointer-events:none;right:0;top:0}.v-chip .v-avatar{height:24px!important;min-width:24px!important;width:24px!important}.v-chip .v-icon{font-size:24px}.v-application--is-ltr .v-chip .v-avatar--left,.v-application--is-ltr .v-chip .v-icon--left{margin-left:-6px;margin-right:6px}.v-application--is-ltr .v-chip .v-avatar--right,.v-application--is-ltr .v-chip .v-icon--right,.v-application--is-rtl .v-chip .v-avatar--left,.v-application--is-rtl .v-chip .v-icon--left{margin-left:6px;margin-right:-6px}.v-application--is-rtl .v-chip .v-avatar--right,.v-application--is-rtl .v-chip .v-icon--right{margin-left:-6px;margin-right:6px}.v-chip:not(.v-chip--no-color) .v-icon{color:inherit}.v-chip .v-chip__close.v-icon{font-size:18px;max-height:18px;max-width:18px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.v-application--is-ltr .v-chip .v-chip__close.v-icon.v-icon--right{margin-right:-4px}.v-application--is-rtl .v-chip .v-chip__close.v-icon.v-icon--right{margin-left:-4px}.v-chip .v-chip__close.v-icon:active,.v-chip .v-chip__close.v-icon:focus,.v-chip .v-chip__close.v-icon:hover{opacity:.72}.v-chip .v-chip__content{align-items:center;display:inline-flex;height:100%;max-width:100%}.v-chip--active .v-icon{color:inherit}.v-chip--link:before{transition:opacity .3s cubic-bezier(.25,.8,.5,1)}.v-chip--link:focus:before{opacity:.32}.v-chip--clickable{cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.v-chip--clickable:active{box-shadow:0 3px 1px -2px rgba(0,0,0,.2),0 2px 2px 0 rgba(0,0,0,.14),0 1px 5px 0 rgba(0,0,0,.12)}.v-chip--disabled{opacity:.4;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.v-chip__filter{max-width:24px}.v-chip__filter.v-icon{color:inherit}.v-chip__filter.expand-x-transition-enter,.v-chip__filter.expand-x-transition-leave-active{margin:0}.v-chip--pill .v-chip__filter{margin-right:0 16px 0 0}.v-chip--pill .v-avatar{height:32px!important;width:32px!important}.v-application--is-ltr .v-chip--pill .v-avatar--left{margin-left:-12px}.v-application--is-ltr .v-chip--pill .v-avatar--right,.v-application--is-rtl .v-chip--pill .v-avatar--left{margin-right:-12px}.v-application--is-rtl .v-chip--pill .v-avatar--right{margin-left:-12px}.v-chip--label{border-radius:4px!important}.v-chip.v-chip--outlined{border-width:thin;border-style:solid}.v-chip.v-chip--outlined.v-chip--active:before{opacity:.08}.v-chip.v-chip--outlined .v-icon{color:inherit}.v-chip.v-chip--outlined.v-chip.v-chip{background-color:transparent!important}.v-chip.v-chip--selected{background:transparent}.v-chip.v-chip--selected:after{opacity:.28}.v-chip.v-size--x-small{border-radius:8px;font-size:10px;height:16px}.v-chip.v-size--x-small .v-icon{font-size:10px;height:10px;width:10px}.v-chip.v-size--small{border-radius:12px;font-size:12px;height:24px}.v-chip.v-size--small .v-icon{font-size:12px;height:12px;width:12px}.v-chip.v-size--default{border-radius:16px;font-size:14px;height:32px}.v-chip.v-size--default .v-icon{font-size:14px;height:14px;width:14px}.v-chip.v-size--large{border-radius:27px;font-size:16px;height:54px}.v-chip.v-size--large .v-icon{font-size:16px;height:16px;width:16px}.v-chip.v-size--x-large{border-radius:33px;font-size:18px;height:66px}.v-chip.v-size--x-large .v-icon{font-size:18px;height:18px;width:18px}.v-menu{display:none}.v-menu--attached{display:inline}.v-menu__content{position:absolute;display:inline-block;max-width:80%;overflow-y:auto;overflow-x:hidden;contain:content;box-shadow:0 5px 5px -3px rgba(0,0,0,.2),0 8px 10px 1px rgba(0,0,0,.14),0 3px 14px 2px rgba(0,0,0,.12);border-radius:4px}.v-menu__content--active{pointer-events:none}.v-menu__content--auto .v-list-item{transition-property:transform,opacity;transition-duration:.3s;transition-timing-function:cubic-bezier(.25,.8,.25,1)}.v-menu__content--fixed{position:fixed}.v-menu__content>.card{contain:content;backface-visibility:hidden}.v-menu>.v-menu__content{max-width:none}.v-menu-transition-enter .v-list-item{min-width:0;pointer-events:none}.v-menu-transition-enter-to .v-list-item{transition-delay:.1s}.v-menu-transition-leave-active,.v-menu-transition-leave-to{pointer-events:none}.v-menu-transition-enter,.v-menu-transition-leave-to{opacity:0}.v-menu-transition-enter-active,.v-menu-transition-leave-active{transition:all .3s cubic-bezier(.25,.8,.25,1)}.v-menu-transition-enter.v-menu__content--auto{transition:none!important}.v-menu-transition-enter.v-menu__content--auto .v-list-item{opacity:0;transform:translateY(-15px)}.v-menu-transition-enter.v-menu__content--auto .v-list-item--active{opacity:1;transform:none!important;pointer-events:auto}.theme--light.v-btn-toggle:not(.v-btn-toggle--group){background:#fff;color:rgba(0,0,0,.87)}.theme--light.v-btn-toggle:not(.v-btn-toggle--group) .v-btn.v-btn{border-color:rgba(0,0,0,.12)!important}.theme--light.v-btn-toggle:not(.v-btn-toggle--group) .v-btn.v-btn:focus:not(:active){border-color:rgba(0,0,0,.26)}.theme--light.v-btn-toggle:not(.v-btn-toggle--group) .v-btn.v-btn .v-icon{color:#000}.theme--dark.v-btn-toggle:not(.v-btn-toggle--group){background:#1e1e1e;color:#fff}.theme--dark.v-btn-toggle:not(.v-btn-toggle--group) .v-btn.v-btn{border-color:hsla(0,0%,100%,.12)!important}.theme--dark.v-btn-toggle:not(.v-btn-toggle--group) .v-btn.v-btn:focus:not(:active){border-color:hsla(0,0%,100%,.3)}.theme--dark.v-btn-toggle:not(.v-btn-toggle--group) .v-btn.v-btn .v-icon{color:#fff}.v-btn-toggle{border-radius:4px;display:inline-flex;max-width:100%}.v-btn-toggle>.v-btn.v-btn{border-radius:0;border-style:solid;border-width:thin;box-shadow:none;opacity:.8;padding:0 12px}.v-application--is-ltr .v-btn-toggle>.v-btn.v-btn:first-child{border-top-left-radius:inherit;border-bottom-left-radius:inherit}.v-application--is-ltr .v-btn-toggle>.v-btn.v-btn:last-child,.v-application--is-rtl .v-btn-toggle>.v-btn.v-btn:first-child{border-top-right-radius:inherit;border-bottom-right-radius:inherit}.v-application--is-rtl .v-btn-toggle>.v-btn.v-btn:last-child{border-top-left-radius:inherit;border-bottom-left-radius:inherit}.v-btn-toggle>.v-btn.v-btn--active{color:inherit;opacity:1}.v-btn-toggle>.v-btn.v-btn:after{display:none}.v-application--is-ltr .v-btn-toggle>.v-btn.v-btn:not(:first-child),.v-application--is-rtl .v-btn-toggle>.v-btn.v-btn:not(:last-child){border-left-width:0}.v-btn-toggle .v-btn.v-btn.v-size--default{min-width:48px;min-height:0}.v-btn-toggle:not(.v-btn-toggle--dense) .v-btn.v-btn.v-size--default{height:48px}.v-btn-toggle--borderless>.v-btn.v-btn{border-width:0}.v-btn-toggle--dense>.v-btn.v-btn{padding:0 8px}.v-btn-toggle--group{border-radius:0}.v-btn-toggle--group>.v-btn.v-btn{background-color:transparent!important;border-color:transparent;margin:4px;min-width:auto}.v-btn-toggle--rounded{border-radius:24px}.v-btn-toggle--shaped{border-radius:24px 4px}.v-btn-toggle--tile{border-radius:0}.v-select{position:relative;font-family:inherit}.v-select,.v-select *{box-sizing:border-box}@keyframes vSelectSpinner{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.vs__fade-enter-active,.vs__fade-leave-active{pointer-events:none;transition:opacity .15s cubic-bezier(1,.5,.8,1)}.vs__fade-enter,.vs__fade-leave-to{opacity:0}.vs--disabled .vs__clear,.vs--disabled .vs__dropdown-toggle,.vs--disabled .vs__open-indicator,.vs--disabled .vs__search,.vs--disabled .vs__selected{cursor:not-allowed;background-color:#f8f8f8}.v-select[dir=rtl] .vs__actions{padding:0 3px 0 6px}.v-select[dir=rtl] .vs__clear{margin-left:6px;margin-right:0}.v-select[dir=rtl] .vs__deselect{margin-left:0;margin-right:2px}.v-select[dir=rtl] .vs__dropdown-menu{text-align:right}.vs__dropdown-toggle{-webkit-appearance:none;-moz-appearance:none;appearance:none;display:flex;padding:0 0 4px;background:none;border:1px solid rgba(60,60,60,.26);border-radius:4px;white-space:normal}.vs__selected-options{display:flex;flex-basis:100%;flex-grow:1;flex-wrap:wrap;padding:0 2px;position:relative}.vs__actions{display:flex;align-items:center;padding:4px 6px 0 3px}.vs--searchable .vs__dropdown-toggle{cursor:text}.vs--unsearchable .vs__dropdown-toggle{cursor:pointer}.vs--open .vs__dropdown-toggle{border-bottom-color:transparent;border-bottom-left-radius:0;border-bottom-right-radius:0}.vs__open-indicator{fill:rgba(60,60,60,.5);transform:scale(1);transition:transform .15s cubic-bezier(1,-.115,.975,.855);transition-timing-function:cubic-bezier(1,-.115,.975,.855)}.vs--open .vs__open-indicator{transform:rotate(180deg) scale(1)}.vs--loading .vs__open-indicator{opacity:0}.vs__clear{fill:rgba(60,60,60,.5);padding:0;border:0;background-color:transparent;cursor:pointer;margin-right:8px}.vs__dropdown-menu{display:block;box-sizing:border-box;position:absolute;top:calc(100% - 1px);left:0;z-index:1000;padding:5px 0;margin:0;width:100%;max-height:350px;min-width:160px;overflow-y:auto;box-shadow:0 3px 6px 0 rgba(0,0,0,.15);border:1px solid rgba(60,60,60,.26);border-top-style:none;border-radius:0 0 4px 4px;text-align:left;list-style:none;background:#fff}.vs__no-options{text-align:center}.vs__dropdown-option{line-height:1.42857143;display:block;padding:3px 20px;clear:both;color:#333;white-space:nowrap;cursor:pointer}.vs__dropdown-option--highlight{background:#5897fb;color:#fff}.vs__dropdown-option--disabled{background:inherit;color:rgba(60,60,60,.5);cursor:inherit}.vs__selected{display:flex;align-items:center;background-color:#f0f0f0;border:1px solid rgba(60,60,60,.26);border-radius:4px;color:#333;line-height:1.4;margin:4px 2px 0;padding:0 .25em;z-index:0}.vs__deselect{display:inline-flex;-webkit-appearance:none;-moz-appearance:none;appearance:none;margin-left:4px;padding:0;border:0;cursor:pointer;background:none;fill:rgba(60,60,60,.5);text-shadow:0 1px 0 #fff}.vs--single .vs__selected{background-color:transparent;border-color:transparent}.vs--single.vs--open .vs__selected{position:absolute;opacity:.4}.vs--single.vs--searching .vs__selected{display:none}.vs__search::-webkit-search-cancel-button{display:none}.vs__search::-ms-clear,.vs__search::-webkit-search-decoration,.vs__search::-webkit-search-results-button,.vs__search::-webkit-search-results-decoration{display:none}.vs__search,.vs__search:focus{-webkit-appearance:none;-moz-appearance:none;appearance:none;line-height:1.4;font-size:1em;border:1px solid transparent;border-left:none;outline:none;margin:4px 0 0;padding:0 7px;background:none;box-shadow:none;width:0;max-width:100%;flex-grow:1;z-index:1}.vs__search::-moz-placeholder{color:inherit}.vs__search:-ms-input-placeholder{color:inherit}.vs__search::placeholder{color:inherit}.vs--unsearchable .vs__search{opacity:1}.vs--unsearchable:not(.vs--disabled) .vs__search:hover{cursor:pointer}.vs--single.vs--searching:not(.vs--open):not(.vs--loading) .vs__search{opacity:.2}.vs__spinner{align-self:center;opacity:0;font-size:5px;text-indent:-9999em;overflow:hidden;border:.9em solid hsla(0,0%,39.2%,.1);border-left-color:rgba(60,60,60,.45);transform:translateZ(0);animation:vSelectSpinner 1.1s linear infinite;transition:opacity .1s}.vs__spinner,.vs__spinner:after{border-radius:50%;width:5em;height:5em}.vs--loading .vs__spinner{opacity:1}.theme--light.v-expansion-panels .v-expansion-panel{background-color:#fff;color:rgba(0,0,0,.87)}.theme--light.v-expansion-panels .v-expansion-panel--disabled{color:rgba(0,0,0,.38)}.theme--light.v-expansion-panels .v-expansion-panel:not(:first-child):after{border-color:rgba(0,0,0,.12)}.theme--light.v-expansion-panels .v-expansion-panel-header .v-expansion-panel-header__icon .v-icon{color:rgba(0,0,0,.54)}.theme--light.v-expansion-panels.v-expansion-panels--focusable .v-expansion-panel-header:hover:before{opacity:.04}.theme--light.v-expansion-panels.v-expansion-panels--focusable .v-expansion-panel-header--active:before,.theme--light.v-expansion-panels.v-expansion-panels--focusable .v-expansion-panel-header--active:hover:before,.theme--light.v-expansion-panels.v-expansion-panels--focusable .v-expansion-panel-header:focus:before{opacity:.12}.theme--light.v-expansion-panels.v-expansion-panels--focusable .v-expansion-panel-header--active:focus:before{opacity:.16}.theme--light.v-expansion-panels.v-expansion-panels--hover>.v-expansion-panel>.v-expansion-panel-header:hover:hover:before{opacity:.04}.theme--light.v-expansion-panels.v-expansion-panels--hover>.v-expansion-panel>.v-expansion-panel-header:hover--active:before,.theme--light.v-expansion-panels.v-expansion-panels--hover>.v-expansion-panel>.v-expansion-panel-header:hover--active:hover:before,.theme--light.v-expansion-panels.v-expansion-panels--hover>.v-expansion-panel>.v-expansion-panel-header:hover:focus:before{opacity:.12}.theme--light.v-expansion-panels.v-expansion-panels--hover>.v-expansion-panel>.v-expansion-panel-header:hover--active:focus:before{opacity:.16}.theme--dark.v-expansion-panels .v-expansion-panel{background-color:#1e1e1e;color:#fff}.theme--dark.v-expansion-panels .v-expansion-panel--disabled{color:hsla(0,0%,100%,.5)}.theme--dark.v-expansion-panels .v-expansion-panel:not(:first-child):after{border-color:hsla(0,0%,100%,.12)}.theme--dark.v-expansion-panels .v-expansion-panel-header .v-expansion-panel-header__icon .v-icon{color:#fff}.theme--dark.v-expansion-panels.v-expansion-panels--focusable .v-expansion-panel-header:hover:before{opacity:.08}.theme--dark.v-expansion-panels.v-expansion-panels--focusable .v-expansion-panel-header--active:before,.theme--dark.v-expansion-panels.v-expansion-panels--focusable .v-expansion-panel-header--active:hover:before,.theme--dark.v-expansion-panels.v-expansion-panels--focusable .v-expansion-panel-header:focus:before{opacity:.24}.theme--dark.v-expansion-panels.v-expansion-panels--focusable .v-expansion-panel-header--active:focus:before{opacity:.32}.theme--dark.v-expansion-panels.v-expansion-panels--hover>.v-expansion-panel>.v-expansion-panel-header:hover:hover:before{opacity:.08}.theme--dark.v-expansion-panels.v-expansion-panels--hover>.v-expansion-panel>.v-expansion-panel-header:hover--active:before,.theme--dark.v-expansion-panels.v-expansion-panels--hover>.v-expansion-panel>.v-expansion-panel-header:hover--active:hover:before,.theme--dark.v-expansion-panels.v-expansion-panels--hover>.v-expansion-panel>.v-expansion-panel-header:hover:focus:before{opacity:.24}.theme--dark.v-expansion-panels.v-expansion-panels--hover>.v-expansion-panel>.v-expansion-panel-header:hover--active:focus:before{opacity:.32}.v-expansion-panels{border-radius:4px;display:flex;flex-wrap:wrap;justify-content:center;list-style-type:none;padding:0;width:100%;z-index:1}.v-expansion-panels>*{cursor:auto}.v-expansion-panels>:first-child{border-top-left-radius:inherit;border-top-right-radius:inherit}.v-expansion-panels>:last-child{border-bottom-left-radius:inherit;border-bottom-right-radius:inherit}.v-expansion-panels:not(.v-expansion-panels--accordion):not(.v-expansion-panels--tile)>.v-expansion-panel--active{border-radius:4px}.v-expansion-panels:not(.v-expansion-panels--accordion):not(.v-expansion-panels--tile)>.v-expansion-panel--active+.v-expansion-panel{border-top-left-radius:4px;border-top-right-radius:4px}.v-expansion-panels:not(.v-expansion-panels--accordion):not(.v-expansion-panels--tile)>.v-expansion-panel--next-active{border-bottom-left-radius:4px;border-bottom-right-radius:4px}.v-expansion-panels:not(.v-expansion-panels--accordion):not(.v-expansion-panels--tile)>.v-expansion-panel--next-active .v-expansion-panel-header{border-bottom-left-radius:inherit;border-bottom-right-radius:inherit}.v-expansion-panel{flex:1 0 100%;max-width:100%;position:relative;transition:.3s cubic-bezier(.25,.8,.5,1)}.v-expansion-panel:before{border-radius:inherit;bottom:0;content:"";left:0;position:absolute;right:0;top:0;z-index:-1;transition:box-shadow .28s cubic-bezier(.4,0,.2,1);box-shadow:0 3px 1px -2px rgba(0,0,0,.2),0 2px 2px 0 rgba(0,0,0,.14),0 1px 5px 0 rgba(0,0,0,.12)}.v-expansion-panel:not(:first-child):after{border-top:thin solid;content:"";left:0;position:absolute;right:0;top:0;transition:border-color .2s cubic-bezier(.4,0,.2,1),opacity .2s cubic-bezier(.4,0,.2,1)}.v-expansion-panel--disabled .v-expansion-panel-header{pointer-events:none}.v-expansion-panel--active+.v-expansion-panel,.v-expansion-panel--active:not(:first-child){margin-top:16px}.v-expansion-panel--active+.v-expansion-panel:after,.v-expansion-panel--active:not(:first-child):after{opacity:0}.v-expansion-panel--active>.v-expansion-panel-header{min-height:64px}.v-expansion-panel--active>.v-expansion-panel-header--active .v-expansion-panel-header__icon:not(.v-expansion-panel-header__icon--disable-rotate) .v-icon{transform:rotate(-180deg)}.v-expansion-panel-header__icon{display:inline-flex;margin-bottom:-4px;margin-top:-4px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.v-application--is-ltr .v-expansion-panel-header__icon{margin-left:auto}.v-application--is-rtl .v-expansion-panel-header__icon{margin-right:auto}.v-expansion-panel-header{align-items:center;border-top-left-radius:inherit;border-top-right-radius:inherit;display:flex;font-size:.9375rem;line-height:1;min-height:48px;outline:none;padding:16px 24px;position:relative;transition:min-height .3s cubic-bezier(.25,.8,.5,1);width:100%}.v-application--is-ltr .v-expansion-panel-header{text-align:left}.v-application--is-rtl .v-expansion-panel-header{text-align:right}.v-expansion-panel-header:not(.v-expansion-panel-header--mousedown):focus:before{opacity:.12}.v-expansion-panel-header:before{background-color:currentColor;border-radius:inherit;bottom:0;content:"";left:0;opacity:0;pointer-events:none;position:absolute;right:0;top:0;transition:opacity .3s cubic-bezier(.25,.8,.5,1)}.v-expansion-panel-header>:not(.v-expansion-panel-header__icon){flex:1 1 auto}.v-expansion-panel-content{display:flex}.v-expansion-panel-content__wrap{padding:0 24px 16px;flex:1 1 auto;max-width:100%}.v-expansion-panels--accordion>.v-expansion-panel{margin-top:0}.v-expansion-panels--accordion>.v-expansion-panel:after{opacity:1}.v-expansion-panels--popout>.v-expansion-panel{max-width:calc(100% - 32px)}.v-expansion-panels--popout>.v-expansion-panel--active{max-width:calc(100% + 16px)}.v-expansion-panels--inset>.v-expansion-panel{max-width:100%}.v-expansion-panels--inset>.v-expansion-panel--active{max-width:calc(100% - 32px)}.v-expansion-panels--flat>.v-expansion-panel:after{border-top:none}.v-expansion-panels--flat>.v-expansion-panel:before{box-shadow:0 0 0 0 rgba(0,0,0,.2),0 0 0 0 rgba(0,0,0,.14),0 0 0 0 rgba(0,0,0,.12)}.v-expansion-panels--tile,.v-expansion-panels--tile>.v-expansion-panel:before{border-radius:0}.theme--light.v-image{color:rgba(0,0,0,.87)}.theme--dark.v-image{color:#fff}.v-image{z-index:0}.v-image__image,.v-image__placeholder{z-index:-1;position:absolute;top:0;left:0;width:100%;height:100%}.v-image__image{background-repeat:no-repeat}.v-image__image--preload{filter:blur(2px)}.v-image__image--contain{background-size:contain}.v-image__image--cover{background-size:cover}.v-responsive{position:relative;overflow:hidden;flex:1 0 auto;max-width:100%;display:flex}.v-responsive__content{flex:1 0 0px;max-width:100%}.v-application--is-ltr .v-responsive__sizer~.v-responsive__content{margin-left:-100%}.v-application--is-rtl .v-responsive__sizer~.v-responsive__content{margin-right:-100%}.v-responsive__sizer{transition:padding-bottom .2s cubic-bezier(.25,.8,.5,1);flex:1 0 0px}.theme--light.v-navigation-drawer{background-color:#fff}.theme--light.v-navigation-drawer:not(.v-navigation-drawer--floating) .v-navigation-drawer__border{background-color:rgba(0,0,0,.12)}.theme--light.v-navigation-drawer .v-divider{border-color:rgba(0,0,0,.12)}.theme--dark.v-navigation-drawer{background-color:#363636}.theme--dark.v-navigation-drawer:not(.v-navigation-drawer--floating) .v-navigation-drawer__border{background-color:hsla(0,0%,100%,.12)}.theme--dark.v-navigation-drawer .v-divider{border-color:hsla(0,0%,100%,.12)}.v-navigation-drawer{-webkit-overflow-scrolling:touch;display:flex;flex-direction:column;left:0;max-width:100%;overflow:hidden;pointer-events:auto;top:0;transition-duration:.2s;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-property:transform,visibility,width}.v-navigation-drawer:not([data-booted=true]){transition:none!important}.v-navigation-drawer.v-navigation-drawer--right:after{left:0;right:auto}.v-navigation-drawer .v-list:not(.v-select-list){background:inherit}.v-navigation-drawer__border{position:absolute;right:0;top:0;height:100%;width:1px}.v-navigation-drawer__content{height:100%;overflow-y:auto;overflow-x:hidden}.v-navigation-drawer__image{border-radius:inherit;height:100%;position:absolute;top:0;bottom:0;z-index:-1;contain:strict;width:100%}.v-navigation-drawer__image .v-image{border-radius:inherit}.v-navigation-drawer--bottom.v-navigation-drawer--is-mobile{max-height:50%;top:auto;bottom:0;min-width:100%}.v-navigation-drawer--right{left:auto;right:0}.v-navigation-drawer--right>.v-navigation-drawer__border{right:auto;left:0}.v-navigation-drawer--absolute{z-index:1}.v-navigation-drawer--fixed{z-index:6}.v-navigation-drawer--absolute{position:absolute}.v-navigation-drawer--clipped:not(.v-navigation-drawer--temporary):not(.v-navigation-drawer--is-mobile){z-index:4}.v-navigation-drawer--fixed{position:fixed}.v-navigation-drawer--floating:after{display:none}.v-navigation-drawer--mini-variant{overflow:hidden}.v-navigation-drawer--mini-variant .v-list-item>:first-child{margin-left:0;margin-right:0}.v-navigation-drawer--mini-variant .v-list-item>:not(:first-child){position:absolute!important;height:1px;width:1px;overflow:hidden;clip:rect(1px,1px,1px,1px);white-space:nowrap;display:initial}.v-navigation-drawer--mini-variant .v-list-group--no-action .v-list-group__items,.v-navigation-drawer--mini-variant .v-list-group--sub-group{display:none}.v-navigation-drawer--mini-variant.v-navigation-drawer--custom-mini-variant .v-list-item{justify-content:center}.v-navigation-drawer--temporary{z-index:7}.v-navigation-drawer--mobile{z-index:6}.v-navigation-drawer--close{visibility:hidden}.v-navigation-drawer--is-mobile:not(.v-navigation-drawer--close),.v-navigation-drawer--temporary:not(.v-navigation-drawer--close){box-shadow:0 8px 10px -5px rgba(0,0,0,.2),0 16px 24px 2px rgba(0,0,0,.14),0 6px 30px 5px rgba(0,0,0,.12)}.theme--light.v-application{background:#fff;color:rgba(0,0,0,.87)}.theme--light.v-application .text--primary{color:rgba(0,0,0,.87)!important}.theme--light.v-application .text--secondary{color:rgba(0,0,0,.6)!important}.theme--light.v-application .text--disabled{color:rgba(0,0,0,.38)!important}.theme--dark.v-application{background:#121212;color:#fff}.theme--dark.v-application .text--primary{color:#fff!important}.theme--dark.v-application .text--secondary{color:hsla(0,0%,100%,.7)!important}.theme--dark.v-application .text--disabled{color:hsla(0,0%,100%,.5)!important}.v-application{display:flex;position:relative}.v-application a{cursor:pointer}.v-application--is-rtl{direction:rtl}.v-application--wrap{flex:1 1 auto;backface-visibility:hidden;display:flex;flex-direction:column;min-height:100vh;max-width:100%;position:relative}@-moz-document url-prefix(){@media print{.v-application,.v-application--wrap{display:block}}}@font-face{font-family:Roboto;src:url(../fonts/Roboto-Thin.ad538a69.woff2) format("woff2"),url(../fonts/Roboto-Thin.d3b47375.woff) format("woff");font-weight:100;font-style:normal}@font-face{font-family:Roboto-Thin;src:url(../fonts/Roboto-Thin.ad538a69.woff2) format("woff2"),url(../fonts/Roboto-Thin.d3b47375.woff) format("woff")}@font-face{font-family:Roboto;src:url(../fonts/Roboto-ThinItalic.5b4a33e1.woff2) format("woff2"),url(../fonts/Roboto-ThinItalic.8a96edbb.woff) format("woff");font-weight:100;font-style:italic}@font-face{font-family:Roboto-ThinItalic;src:url(../fonts/Roboto-ThinItalic.5b4a33e1.woff2) format("woff2"),url(../fonts/Roboto-ThinItalic.8a96edbb.woff) format("woff")}@font-face{font-family:Roboto;src:url(../fonts/Roboto-Light.d26871e8.woff2) format("woff2"),url(../fonts/Roboto-Light.c73eb1ce.woff) format("woff");font-weight:300;font-style:normal}@font-face{font-family:Roboto-Light;src:url(../fonts/Roboto-Light.d26871e8.woff2) format("woff2"),url(../fonts/Roboto-Light.c73eb1ce.woff) format("woff")}@font-face{font-family:Roboto;src:url(../fonts/Roboto-LightItalic.e8eaae90.woff2) format("woff2"),url(../fonts/Roboto-LightItalic.13efe6cb.woff) format("woff");font-weight:300;font-style:italic}@font-face{font-family:Roboto-LightItalic;src:url(../fonts/Roboto-LightItalic.e8eaae90.woff2) format("woff2"),url(../fonts/Roboto-LightItalic.13efe6cb.woff) format("woff")}@font-face{font-family:Roboto;src:url(../fonts/Roboto-Regular.73f0a88b.woff2) format("woff2"),url(../fonts/Roboto-Regular.35b07eb2.woff) format("woff");font-weight:400;font-style:normal}@font-face{font-family:Roboto-Regular;src:url(../fonts/Roboto-Regular.73f0a88b.woff2) format("woff2"),url(../fonts/Roboto-Regular.35b07eb2.woff) format("woff")}@font-face{font-family:Roboto;src:url(../fonts/Roboto-RegularItalic.4357beb8.woff2) format("woff2"),url(../fonts/Roboto-RegularItalic.f5902d5e.woff) format("woff");font-weight:400;font-style:italic}@font-face{font-family:Roboto-RegularItalic;src:url(../fonts/Roboto-RegularItalic.4357beb8.woff2) format("woff2"),url(../fonts/Roboto-RegularItalic.f5902d5e.woff) format("woff")}@font-face{font-family:Roboto;src:url(../fonts/Roboto-Medium.90d16760.woff2) format("woff2"),url(../fonts/Roboto-Medium.1d659482.woff) format("woff");font-weight:500;font-style:normal}@font-face{font-family:Roboto-Medium;src:url(../fonts/Roboto-Medium.90d16760.woff2) format("woff2"),url(../fonts/Roboto-Medium.1d659482.woff) format("woff")}@font-face{font-family:Roboto;src:url(../fonts/Roboto-MediumItalic.13ec0eb5.woff2) format("woff2"),url(../fonts/Roboto-MediumItalic.83e114c3.woff) format("woff");font-weight:500;font-style:italic}@font-face{font-family:Roboto-MediumItalic;src:url(../fonts/Roboto-MediumItalic.13ec0eb5.woff2) format("woff2"),url(../fonts/Roboto-MediumItalic.83e114c3.woff) format("woff")}@font-face{font-family:Roboto;src:url(../fonts/Roboto-Bold.b52fac2b.woff2) format("woff2"),url(../fonts/Roboto-Bold.50d75e48.woff) format("woff");font-weight:700;font-style:normal}@font-face{font-family:Roboto-Bold;src:url(../fonts/Roboto-Bold.b52fac2b.woff2) format("woff2"),url(../fonts/Roboto-Bold.50d75e48.woff) format("woff")}@font-face{font-family:Roboto;src:url(../fonts/Roboto-BoldItalic.94008e69.woff2) format("woff2"),url(../fonts/Roboto-BoldItalic.4fe0f73c.woff) format("woff");font-weight:700;font-style:italic}@font-face{font-family:Roboto-BoldItalic;src:url(../fonts/Roboto-BoldItalic.94008e69.woff2) format("woff2"),url(../fonts/Roboto-BoldItalic.4fe0f73c.woff) format("woff")}@font-face{font-family:Roboto;src:url(../fonts/Roboto-Black.59eb3601.woff2) format("woff2"),url(../fonts/Roboto-Black.313a6563.woff) format("woff");font-weight:900;font-style:normal}@font-face{font-family:Roboto-Black;src:url(../fonts/Roboto-Black.59eb3601.woff2) format("woff2"),url(../fonts/Roboto-Black.313a6563.woff) format("woff")}@font-face{font-family:Roboto;src:url(../fonts/Roboto-BlackItalic.f75569f8.woff2) format("woff2"),url(../fonts/Roboto-BlackItalic.cc2fadc3.woff) format("woff");font-weight:900;font-style:italic}@font-face{font-family:Roboto-BlackItalic;src:url(../fonts/Roboto-BlackItalic.f75569f8.woff2) format("woff2"),url(../fonts/Roboto-BlackItalic.cc2fadc3.woff) format("woff")} \ No newline at end of file diff --git a/dist/demo.css b/dist/demo.css new file mode 100644 index 00000000..a712e7bf --- /dev/null +++ b/dist/demo.css @@ -0,0 +1,53 @@ +#canvas_block { + position: fixed; + padding: 0px; +} + +#c { + width: 100%; + height: 100%; +} + +#button_block { + display: block; + position: fixed; + left: 0; + width: 250px; + height: 100%; + background: #eee; + top: 0; +} + +#param-slider-container { + padding: 15; +} + +hr { + border: 0; + border-bottom: 1px dashed #ccc; + background: #999; +} + +.slider-container { + margin-bottom: 10; +} + +.btn-label:first-of-type { + margin-top: 0; +} + +.btn-label { + width: 100%; + display: block; + background-color: #1c2b44; + height: auto; + padding: 10px; + font-size: 14px; + margin: 1em 0 1em 0; + color: #eee; + text-shadow: 0 -1px 0 #000; + letter-spacing: 0.1em; + text-transform: uppercase; + font-weight: normal; + box-shadow: 0 2px 0px #ccc; +} diff --git a/dist/favicon.ico b/dist/favicon.ico new file mode 100644 index 00000000..9b5c5c98 Binary files /dev/null and b/dist/favicon.ico differ diff --git a/dist/fonts/Roboto-Black.313a6563.woff b/dist/fonts/Roboto-Black.313a6563.woff new file mode 100644 index 00000000..b1ddac3f Binary files /dev/null and b/dist/fonts/Roboto-Black.313a6563.woff differ diff --git a/dist/fonts/Roboto-Black.59eb3601.woff2 b/dist/fonts/Roboto-Black.59eb3601.woff2 new file mode 100644 index 00000000..41186d07 Binary files /dev/null and b/dist/fonts/Roboto-Black.59eb3601.woff2 differ diff --git a/dist/fonts/Roboto-BlackItalic.cc2fadc3.woff b/dist/fonts/Roboto-BlackItalic.cc2fadc3.woff new file mode 100644 index 00000000..b97efeaf Binary files /dev/null and b/dist/fonts/Roboto-BlackItalic.cc2fadc3.woff differ diff --git a/dist/fonts/Roboto-BlackItalic.f75569f8.woff2 b/dist/fonts/Roboto-BlackItalic.f75569f8.woff2 new file mode 100644 index 00000000..df3c3f44 Binary files /dev/null and b/dist/fonts/Roboto-BlackItalic.f75569f8.woff2 differ diff --git a/dist/fonts/Roboto-Bold.50d75e48.woff b/dist/fonts/Roboto-Bold.50d75e48.woff new file mode 100644 index 00000000..6e0f5626 Binary files /dev/null and b/dist/fonts/Roboto-Bold.50d75e48.woff differ diff --git a/dist/fonts/Roboto-Bold.b52fac2b.woff2 b/dist/fonts/Roboto-Bold.b52fac2b.woff2 new file mode 100644 index 00000000..76817cc7 Binary files /dev/null and b/dist/fonts/Roboto-Bold.b52fac2b.woff2 differ diff --git a/dist/fonts/Roboto-BoldItalic.4fe0f73c.woff b/dist/fonts/Roboto-BoldItalic.4fe0f73c.woff new file mode 100644 index 00000000..ea90d717 Binary files /dev/null and b/dist/fonts/Roboto-BoldItalic.4fe0f73c.woff differ diff --git a/dist/fonts/Roboto-BoldItalic.94008e69.woff2 b/dist/fonts/Roboto-BoldItalic.94008e69.woff2 new file mode 100644 index 00000000..45c9ef73 Binary files /dev/null and b/dist/fonts/Roboto-BoldItalic.94008e69.woff2 differ diff --git a/dist/fonts/Roboto-Light.c73eb1ce.woff b/dist/fonts/Roboto-Light.c73eb1ce.woff new file mode 100644 index 00000000..b9e99185 Binary files /dev/null and b/dist/fonts/Roboto-Light.c73eb1ce.woff differ diff --git a/dist/fonts/Roboto-Light.d26871e8.woff2 b/dist/fonts/Roboto-Light.d26871e8.woff2 new file mode 100644 index 00000000..ddbf4a92 Binary files /dev/null and b/dist/fonts/Roboto-Light.d26871e8.woff2 differ diff --git a/dist/fonts/Roboto-LightItalic.13efe6cb.woff b/dist/fonts/Roboto-LightItalic.13efe6cb.woff new file mode 100644 index 00000000..329ec9b5 Binary files /dev/null and b/dist/fonts/Roboto-LightItalic.13efe6cb.woff differ diff --git a/dist/fonts/Roboto-LightItalic.e8eaae90.woff2 b/dist/fonts/Roboto-LightItalic.e8eaae90.woff2 new file mode 100644 index 00000000..ba70c2a3 Binary files /dev/null and b/dist/fonts/Roboto-LightItalic.e8eaae90.woff2 differ diff --git a/dist/fonts/Roboto-Medium.1d659482.woff b/dist/fonts/Roboto-Medium.1d659482.woff new file mode 100644 index 00000000..005e9281 Binary files /dev/null and b/dist/fonts/Roboto-Medium.1d659482.woff differ diff --git a/dist/fonts/Roboto-Medium.90d16760.woff2 b/dist/fonts/Roboto-Medium.90d16760.woff2 new file mode 100644 index 00000000..6a88805f Binary files /dev/null and b/dist/fonts/Roboto-Medium.90d16760.woff2 differ diff --git a/dist/fonts/Roboto-MediumItalic.13ec0eb5.woff2 b/dist/fonts/Roboto-MediumItalic.13ec0eb5.woff2 new file mode 100644 index 00000000..cf21729c Binary files /dev/null and b/dist/fonts/Roboto-MediumItalic.13ec0eb5.woff2 differ diff --git a/dist/fonts/Roboto-MediumItalic.83e114c3.woff b/dist/fonts/Roboto-MediumItalic.83e114c3.woff new file mode 100644 index 00000000..01eba140 Binary files /dev/null and b/dist/fonts/Roboto-MediumItalic.83e114c3.woff differ diff --git a/dist/fonts/Roboto-Regular.35b07eb2.woff b/dist/fonts/Roboto-Regular.35b07eb2.woff new file mode 100644 index 00000000..96c1986f Binary files /dev/null and b/dist/fonts/Roboto-Regular.35b07eb2.woff differ diff --git a/dist/fonts/Roboto-Regular.73f0a88b.woff2 b/dist/fonts/Roboto-Regular.73f0a88b.woff2 new file mode 100644 index 00000000..9a0064ec Binary files /dev/null and b/dist/fonts/Roboto-Regular.73f0a88b.woff2 differ diff --git a/dist/fonts/Roboto-RegularItalic.4357beb8.woff2 b/dist/fonts/Roboto-RegularItalic.4357beb8.woff2 new file mode 100644 index 00000000..e7f173b7 Binary files /dev/null and b/dist/fonts/Roboto-RegularItalic.4357beb8.woff2 differ diff --git a/dist/fonts/Roboto-RegularItalic.f5902d5e.woff b/dist/fonts/Roboto-RegularItalic.f5902d5e.woff new file mode 100644 index 00000000..818233db Binary files /dev/null and b/dist/fonts/Roboto-RegularItalic.f5902d5e.woff differ diff --git a/dist/fonts/Roboto-Thin.ad538a69.woff2 b/dist/fonts/Roboto-Thin.ad538a69.woff2 new file mode 100644 index 00000000..2fb9b5f6 Binary files /dev/null and b/dist/fonts/Roboto-Thin.ad538a69.woff2 differ diff --git a/dist/fonts/Roboto-Thin.d3b47375.woff b/dist/fonts/Roboto-Thin.d3b47375.woff new file mode 100644 index 00000000..e1cee8f4 Binary files /dev/null and b/dist/fonts/Roboto-Thin.d3b47375.woff differ diff --git a/dist/fonts/Roboto-ThinItalic.5b4a33e1.woff2 b/dist/fonts/Roboto-ThinItalic.5b4a33e1.woff2 new file mode 100644 index 00000000..67c42406 Binary files /dev/null and b/dist/fonts/Roboto-ThinItalic.5b4a33e1.woff2 differ diff --git a/dist/fonts/Roboto-ThinItalic.8a96edbb.woff b/dist/fonts/Roboto-ThinItalic.8a96edbb.woff new file mode 100644 index 00000000..d3373781 Binary files /dev/null and b/dist/fonts/Roboto-ThinItalic.8a96edbb.woff differ diff --git a/dist/fonts/materialdesignicons-webfont.147e3378.woff b/dist/fonts/materialdesignicons-webfont.147e3378.woff new file mode 100644 index 00000000..a5ee6239 Binary files /dev/null and b/dist/fonts/materialdesignicons-webfont.147e3378.woff differ diff --git a/dist/fonts/materialdesignicons-webfont.174c02fc.ttf b/dist/fonts/materialdesignicons-webfont.174c02fc.ttf new file mode 100644 index 00000000..55456295 Binary files /dev/null and b/dist/fonts/materialdesignicons-webfont.174c02fc.ttf differ diff --git a/dist/fonts/materialdesignicons-webfont.64d4cf64.eot b/dist/fonts/materialdesignicons-webfont.64d4cf64.eot new file mode 100644 index 00000000..253bb4a5 Binary files /dev/null and b/dist/fonts/materialdesignicons-webfont.64d4cf64.eot differ diff --git a/dist/fonts/materialdesignicons-webfont.7a44ea19.woff2 b/dist/fonts/materialdesignicons-webfont.7a44ea19.woff2 new file mode 100644 index 00000000..384ae573 Binary files /dev/null and b/dist/fonts/materialdesignicons-webfont.7a44ea19.woff2 differ diff --git a/dist/img/3DuF_favicon_large.svg b/dist/img/3DuF_favicon_large.svg new file mode 100644 index 00000000..2395b8bc --- /dev/null +++ b/dist/img/3DuF_favicon_large.svg @@ -0,0 +1,72 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + diff --git a/dist/img/3DuF_placeholder_logo.png b/dist/img/3DuF_placeholder_logo.png new file mode 100644 index 00000000..ca03f7b4 Binary files /dev/null and b/dist/img/3DuF_placeholder_logo.png differ diff --git a/dist/img/3DuF_placeholder_png.png b/dist/img/3DuF_placeholder_png.png new file mode 100644 index 00000000..30b3e980 Binary files /dev/null and b/dist/img/3DuF_placeholder_png.png differ diff --git a/dist/img/3DuF_placeholder_svg.svg b/dist/img/3DuF_placeholder_svg.svg new file mode 100644 index 00000000..c3a3479c --- /dev/null +++ b/dist/img/3DuF_placeholder_svg.svg @@ -0,0 +1,75 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + diff --git a/dist/img/CHANNEL.6ac8d4e3.png b/dist/img/CHANNEL.6ac8d4e3.png new file mode 100644 index 00000000..baff7c31 Binary files /dev/null and b/dist/img/CHANNEL.6ac8d4e3.png differ diff --git a/dist/img/cidar_logo.png b/dist/img/cidar_logo.png new file mode 100644 index 00000000..3d11c8bd Binary files /dev/null and b/dist/img/cidar_logo.png differ diff --git a/dist/img/favicon_large.png b/dist/img/favicon_large.png new file mode 100644 index 00000000..e30df0c9 Binary files /dev/null and b/dist/img/favicon_large.png differ diff --git a/dist/img/logo.png b/dist/img/logo.png new file mode 100644 index 00000000..2c50163a Binary files /dev/null and b/dist/img/logo.png differ diff --git a/dist/index.html b/dist/index.html new file mode 100644 index 00000000..c6c1b2da --- /dev/null +++ b/dist/index.html @@ -0,0 +1,10 @@ +3DuF
\ No newline at end of file diff --git a/dist/index2.html b/dist/index2.html new file mode 100644 index 00000000..d17c2b08 --- /dev/null +++ b/dist/index2.html @@ -0,0 +1,829 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+ Getting Started + + + + Select Layer + + + + Select Feature + + + Imported + + + Mix + + Control + + Process + + Distribute + + + + + + + + + + + + Save + + About/Help +
+
+
+
+
+
+ +
+
+
+
+
+ + +
+ +
Grid Settings
+
+ +
+
+
+ +
+
+
+ + +
+
+ check_circle +
+
Save
+
+ cancel +
+
Save
+
+ + +
+ file_copy +
+
Copy
+ +
+ delete +
+
Delete
+ +
+ open_with +
+
Move
+ +
+ settings_backup_restore +
+
Revert
+ +
+ select_all +
+
Change All
+ +
+ title +
+
Rename
+ +
+ view_comfy +
+
Generate Array
+
+ +
+
Specify Position
+ +
+ + +
+ + +
+ +
+ + +
+ + +
+ + + + +
+ +
+
Generate:
+ + + + + + + + + + + + + +
+ + Input is not an integer ! +
+ +
+ + Input is not an integer ! +
+ +
Spacing:
+ + +
+ + +
+ + +
+ +
+ + +
+ + + +
+ + + + + +
+ +
+
+ + +
+
+
+
+
+
+ +
Grid Size :
+ + +
+
+
+

3DuF v1.1

+
+
+ + 3DuF is microfluidic design environment developed by CIDAR. For any help or queries, please send an email to + 3dufhelp@gmail.com . Source code, issue tracking and feature requests are available at + Github. +
+ Developed by: Aaron Heuckroth, Joshua Lippai and Radhakrishna Sanka. +
+ Error Tracking powered by https://trackjs.com. +
+ +
+ +
+
+
+
+ + +
+

Getting Started

+
+
+
+
Academic Publications:
+

+ Sanka, Radhakrishna, Joshua Lippai, Dinithi Samarasekera, Sarah Nemsick, and Douglas Densmore.
+ “3DμF - Interactive Design Environment for Continuous Flow Microfluidic Devices.”
+ Scientific Reports 9, no. 1 (December 2019). +

+ https://doi.org/10.1038/s41598-019-45623-z + +
Videos
+ + + + + + + + + + +
+ + + +
IntroductionLong Tutorial
+
+ +

Send in comments, suggestions and issues to 3dufhelp@gmail.com .

+ +
Designs From Literature
+ Check the various designs from microfluidic literature recreated in 3DµF can be found + here. +
Usage
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
del
- Delete Feature
F
- Reset Canvas
Esc
- Activate Select Tool/ Deselect Selected Components
ctrl+C , ctrl+V
- Activate Component Copy Mode
ctrl+Z
- Undo Last Edit
ctrl+A
- Select All
ctrl+S
- Save JSON file
left click
- Place Feature
right click
- Select Feature
mouse scroll
- Zoom
arrow keys
- Pan
+
+ +
+ +
+
+
+ + +
+

Drag and drop the DXF file on the canvas

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

Generate Design of Experiments for a Single Component

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

Rename:

+
+
+ + +
+
+ +

Resize:

+ +
+
+ + + Input is not a number! +
+
+ + + Input is not a number! +
+
+
+
+ + +
+
+ +
+ +

Insert Text:

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

Drag Drop the DXF file containing border to import:

+
+ +
+ +
+
+
+ + + +
+
+ +
+ +
Change All Components:
+
+ + + + + + + + +
SelectNameChange
+
+ + +
+
+ + +
+

Send your design for fabrication at DAMP LAB

+
+
+ +
Enter your contact information:
+
+
+ + +
+
+ + +
+
+ +

Learn more about the DAMP LAB fabrication service here.

+
+ + + + + + +
+
+ + +
+
+ + +
+
+ +
+ + + + + + + diff --git a/dist/js/app.5e0ea8c0.js b/dist/js/app.5e0ea8c0.js new file mode 100644 index 00000000..7b50bee2 --- /dev/null +++ b/dist/js/app.5e0ea8c0.js @@ -0,0 +1,2 @@ +(function(e){function t(t){for(var r,a,l=t[0],s=t[1],u=t[2],h=0,f=[];h0&&(v(e,t),setTimeout((function(){g(e,t)}),n))}function f(e){return Math.max(Math.min(e,100),0)}function d(e){return Array.isArray(e)?e:[e]}function p(e){e=String(e);var t=e.split(".");return t.length>1?t[1].length:0}function v(e,t){e.classList&&!/\s/.test(t)?e.classList.add(t):e.className+=" "+t}function g(e,t){e.classList&&!/\s/.test(t)?e.classList.remove(t):e.className=e.className.replace(new RegExp("(^|\\b)"+t.split(" ").join("|")+"(\\b|$)","gi")," ")}function y(e,t){return e.classList?e.classList.contains(t):new RegExp("\\b"+t+"\\b").test(e.className)}function m(e){var t=void 0!==window.pageXOffset,n="CSS1Compat"===(e.compatMode||""),r=t?window.pageXOffset:n?e.documentElement.scrollLeft:e.body.scrollLeft,o=t?window.pageYOffset:n?e.documentElement.scrollTop:e.body.scrollTop;return{x:r,y:o}}function w(){return window.navigator.pointerEnabled?{start:"pointerdown",move:"pointermove",end:"pointerup"}:window.navigator.msPointerEnabled?{start:"MSPointerDown",move:"MSPointerMove",end:"MSPointerUp"}:{start:"mousedown touchstart",move:"mousemove touchmove",end:"mouseup touchend"}}function b(){var e=!1;try{var t=Object.defineProperty({},"passive",{get:function(){e=!0}});window.addEventListener("test",null,t)}catch(n){}return e}function _(){return window.CSS&&CSS.supports&&CSS.supports("touch-action","none")}function P(e,t){return 100/(t-e)}function C(e,t,n){return 100*t/(e[n+1]-e[n])}function O(e,t){return C(e,e[0]<0?t+Math.abs(e[0]):t-e[0],0)}function S(e,t){return t*(e[1]-e[0])/100+e[0]}function R(e,t){var n=1;while(e>=t[n])n+=1;return n}function L(e,t,n){if(n>=e.slice(-1)[0])return 100;var r=R(n,e),o=e[r-1],i=e[r],a=t[r-1],l=t[r];return a+O([o,i],n)/P(a,l)}function k(e,t,n){if(n>=100)return e.slice(-1)[0];var r=R(n,t),o=e[r-1],i=e[r],a=t[r-1],l=t[r];return S([o,i],(n-a)*P(a,l))}function D(e,t,n,r){if(100===r)return r;var o=R(r,e),i=e[o-1],a=e[o];return n?r-i>(a-i)/2?a:i:t[o-1]?e[o-1]+s(r-e[o-1],t[o-1]):r}e.PipsMode=void 0,function(e){e["Range"]="range",e["Steps"]="steps",e["Positions"]="positions",e["Count"]="count",e["Values"]="values"}(e.PipsMode||(e.PipsMode={})),e.PipsType=void 0,function(e){e[e["None"]=-1]="None",e[e["NoValue"]=0]="NoValue",e[e["LargeValue"]=1]="LargeValue",e[e["SmallValue"]=2]="SmallValue"}(e.PipsType||(e.PipsType={}));var T=function(){function e(e,t,n){var r;this.xPct=[],this.xVal=[],this.xSteps=[],this.xNumSteps=[],this.xHighestCompleteStep=[],this.xSteps=[n||!1],this.xNumSteps=[!1],this.snap=t;var o=[];for(Object.keys(e).forEach((function(t){o.push([d(e[t]),t])})),o.sort((function(e,t){return e[0][0]-t[0][0]})),r=0;rthis.xPct[o+1])o++;else e===this.xPct[this.xPct.length-1]&&(o=this.xPct.length-2);n||e!==this.xPct[o+1]||o++,null===t&&(t=[]);var i=1,a=t[o],l=0,s=0,u=0,c=0;r=n?(e-this.xPct[o])/(this.xPct[o+1]-this.xPct[o]):(this.xPct[o+1]-e)/(this.xPct[o+1]-this.xPct[o]);while(a>0)l=this.xPct[o+1+c]-this.xPct[o+c],t[o+c]*i+100-100*r>100?(s=l*r,i=(a-100*r)/t[o+c],r=1):(s=t[o+c]*l/100*i,i=0),n?(u-=s,this.xPct.length+c>=1&&c--):(u+=s,this.xPct.length-c>=1&&c++),a=t[o+c]*i;return e+u},e.prototype.toStepping=function(e){return e=L(this.xVal,this.xPct,e),e},e.prototype.fromStepping=function(e){return k(this.xVal,this.xPct,e)},e.prototype.getStep=function(e){return e=D(this.xPct,this.xSteps,this.snap,e),e},e.prototype.getDefaultStep=function(e,t,n){var r=R(e,this.xPct);return(100===e||t&&e===this.xPct[r-1])&&(r=Math.max(r-1,1)),(this.xVal[r]-this.xVal[r-1])/n},e.prototype.getNearbySteps=function(e){var t=R(e,this.xPct);return{stepBefore:{startValue:this.xVal[t-2],step:this.xNumSteps[t-2],highestStep:this.xHighestCompleteStep[t-2]},thisStep:{startValue:this.xVal[t-1],step:this.xNumSteps[t-1],highestStep:this.xHighestCompleteStep[t-1]},stepAfter:{startValue:this.xVal[t],step:this.xNumSteps[t],highestStep:this.xHighestCompleteStep[t]}}},e.prototype.countStepDecimals=function(){var e=this.xNumSteps.map(p);return Math.max.apply(null,e)},e.prototype.hasNoSize=function(){return this.xVal[0]===this.xVal[this.xVal.length-1]},e.prototype.convert=function(e){return this.getStep(this.toStepping(e))},e.prototype.handleEntryPoint=function(e,t){var n;if(n="min"===e?0:"max"===e?100:parseFloat(e),!c(n)||!c(t[0]))throw new Error("noUiSlider: 'range' value isn't numeric.");this.xPct.push(n),this.xVal.push(t[0]);var r=Number(t[1]);n?this.xSteps.push(!isNaN(r)&&r):isNaN(r)||(this.xSteps[0]=r),this.xHighestCompleteStep.push(0)},e.prototype.handleStepPoint=function(e,t){if(t)if(this.xVal[e]!==this.xVal[e+1]){this.xSteps[e]=C([this.xVal[e],this.xVal[e+1]],t,0)/P(this.xPct[e],this.xPct[e+1]);var n=(this.xVal[e+1]-this.xVal[e])/this.xNumSteps[e],r=Math.ceil(Number(n.toFixed(3))-1),o=this.xVal[e]+this.xNumSteps[e]*r;this.xHighestCompleteStep[e]=o}else this.xSteps[e]=this.xHighestCompleteStep[e]=this.xVal[e]},e}(),F={to:function(e){return void 0===e?"":e.toFixed(2)},from:Number},E={target:"target",base:"base",origin:"origin",handle:"handle",handleLower:"handle-lower",handleUpper:"handle-upper",touchArea:"touch-area",horizontal:"horizontal",vertical:"vertical",background:"background",connect:"connect",connects:"connects",ltr:"ltr",rtl:"rtl",textDirectionLtr:"txt-dir-ltr",textDirectionRtl:"txt-dir-rtl",draggable:"draggable",drag:"state-drag",tap:"state-tap",active:"active",tooltip:"tooltip",pips:"pips",pipsHorizontal:"pips-horizontal",pipsVertical:"pips-vertical",marker:"marker",markerHorizontal:"marker-horizontal",markerVertical:"marker-vertical",markerNormal:"marker-normal",markerLarge:"marker-large",markerSub:"marker-sub",value:"value",valueHorizontal:"value-horizontal",valueVertical:"value-vertical",valueNormal:"value-normal",valueLarge:"value-large",valueSub:"value-sub"},W={tooltips:".__tooltips",aria:".__aria"};function x(e,t){if(!c(t))throw new Error("noUiSlider: 'step' is not numeric.");e.singleStep=t}function N(e,t){if(!c(t))throw new Error("noUiSlider: 'keyboardPageMultiplier' is not numeric.");e.keyboardPageMultiplier=t}function I(e,t){if(!c(t))throw new Error("noUiSlider: 'keyboardMultiplier' is not numeric.");e.keyboardMultiplier=t}function M(e,t){if(!c(t))throw new Error("noUiSlider: 'keyboardDefaultStep' is not numeric.");e.keyboardDefaultStep=t}function j(e,t){if("object"!==a(t)||Array.isArray(t))throw new Error("noUiSlider: 'range' is not an object.");if(void 0===t.min||void 0===t.max)throw new Error("noUiSlider: Missing 'min' or 'max' in 'range'.");e.spectrum=new T(t,e.snap||!1,e.singleStep)}function A(e,t){if(t=d(t),!Array.isArray(t)||!t.length)throw new Error("noUiSlider: 'start' option is incorrect.");e.handles=t.length,e.start=t}function V(e,t){if("boolean"!==typeof t)throw new Error("noUiSlider: 'snap' option must be a boolean.");e.snap=t}function B(e,t){if("boolean"!==typeof t)throw new Error("noUiSlider: 'animate' option must be a boolean.");e.animate=t}function G(e,t){if("number"!==typeof t)throw new Error("noUiSlider: 'animationDuration' option must be a number.");e.animationDuration=t}function z(e,t){var n,r=[!1];if("lower"===t?t=[!0,!1]:"upper"===t&&(t=[!1,!0]),!0===t||!1===t){for(n=1;n1)throw new Error("noUiSlider: 'padding' option must not exceed 100% of the range.")}}function X(e,t){switch(t){case"ltr":e.dir=0;break;case"rtl":e.dir=1;break;default:throw new Error("noUiSlider: 'direction' option was not recognized.")}}function q(e,t){if("string"!==typeof t)throw new Error("noUiSlider: 'behaviour' must be a string containing options.");var n=t.indexOf("tap")>=0,r=t.indexOf("drag")>=0,o=t.indexOf("fixed")>=0,i=t.indexOf("snap")>=0,a=t.indexOf("hover")>=0,l=t.indexOf("unconstrained")>=0,s=t.indexOf("drag-all")>=0,u=t.indexOf("smooth-steps")>=0;if(o){if(2!==e.handles)throw new Error("noUiSlider: 'fixed' behaviour must be used with 2 handles");K(e,e.start[1]-e.start[0])}if(l&&(e.margin||e.limit))throw new Error("noUiSlider: 'unconstrained' behaviour cannot be used with margin or limit");e.events={tap:n||i,drag:r,dragAll:s,smoothSteps:u,fixed:o,snap:i,hover:a,unconstrained:l}}function J(e,t){if(!1!==t)if(!0===t||n(t)){e.tooltips=[];for(var r=0;r= 2) required for mode 'count'.");var n=t.values-1,r=100/n,o=[];while(n--)o[n]=n*r;return o.push(100),$(o,t.stepped)}return t.mode===e.PipsMode.Positions?$(t.values,t.stepped):t.mode===e.PipsMode.Values?t.stepped?t.values.map((function(e){return k.fromStepping(k.getStep(k.toStepping(e)))})):t.values:[]}function $(e,t){return e.map((function(e){return k.fromStepping(t?k.getStep(e):e)}))}function Z(t){function n(e,t){return Number((e+t).toFixed(7))}var r=J(t),o={},i=k.xVal[0],a=k.xVal[k.xVal.length-1],s=!1,u=!1,c=0;return r=l(r.slice().sort((function(e,t){return e-t}))),r[0]!==i&&(r.unshift(i),s=!0),r[r.length-1]!==a&&(r.push(a),u=!0),r.forEach((function(i,a){var l,h,f,d,p,v,g,y,m,w,b=i,_=r[a+1],P=t.mode===e.PipsMode.Steps;for(P&&(l=k.xNumSteps[a]),l||(l=_-b),void 0===_&&(_=b),l=Math.max(l,1e-7),h=b;h<=_;h=n(h,l)){for(d=k.toStepping(h),p=d-c,y=p/(t.density||1),m=Math.round(y),w=p/m,f=1;f<=m;f+=1)v=c+f*w,o[v.toFixed(5)]=[k.fromStepping(v),0];g=r.indexOf(h)>-1?e.PipsType.LargeValue:P?e.PipsType.SmallValue:e.PipsType.NoValue,!a&&s&&h!==_&&(g=0),h===_&&u||(o[d.toFixed(5)]=[h,g]),c=d}})),o}function Q(t,r,o){var i,a,l=N.createElement("div"),s=(i={},i[e.PipsType.None]="",i[e.PipsType.NoValue]=n.cssClasses.valueNormal,i[e.PipsType.LargeValue]=n.cssClasses.valueLarge,i[e.PipsType.SmallValue]=n.cssClasses.valueSub,i),u=(a={},a[e.PipsType.None]="",a[e.PipsType.NoValue]=n.cssClasses.markerNormal,a[e.PipsType.LargeValue]=n.cssClasses.markerLarge,a[e.PipsType.SmallValue]=n.cssClasses.markerSub,a),c=[n.cssClasses.valueHorizontal,n.cssClasses.valueVertical],h=[n.cssClasses.markerHorizontal,n.cssClasses.markerVertical];function f(e,t){var r=t===n.cssClasses.value,o=r?c:h,i=r?s:u;return t+" "+o[n.ort]+" "+i[e]}function d(t,i,a){if(a=r?r(i,a):a,a!==e.PipsType.None){var s=A(l,!1);s.className=f(a,n.cssClasses.marker),s.style[n.style]=t+"%",a>e.PipsType.NoValue&&(s=A(l,!1),s.className=f(a,n.cssClasses.value),s.setAttribute("data-value",String(i)),s.style[n.style]=t+"%",s.innerHTML=String(o.to(i)))}}return v(l,n.cssClasses.pips),v(l,0===n.ort?n.cssClasses.pipsHorizontal:n.cssClasses.pipsVertical),Object.keys(t).forEach((function(e){d(e,t[e][0],t[e][1])})),l}function ee(){P&&(r(P),P=null)}function te(e){ee();var t=Z(e),n=e.filter,r=e.format||{to:function(e){return String(Math.round(e))}};return P=L.appendChild(Q(t,n,r)),P}function ne(){var e=s.getBoundingClientRect(),t="offset"+["Width","Height"][n.ort];return 0===n.ort?e.width||s[t]:e.height||s[t]}function re(e,t,r,o){var i=function(i){var a=ie(i,o.pageOffset,o.target||t);return!!a&&(!(K()&&!o.doNotReject)&&(!(y(L,n.cssClasses.tap)&&!o.doNotReject)&&(!(e===O.start&&void 0!==a.buttons&&a.buttons>1)&&((!o.hover||!a.buttons)&&(R||a.preventDefault(),a.calcPoint=a.points[n.ort],void r(a,o))))))},a=[];return e.split(" ").forEach((function(e){t.addEventListener(e,i,!!R&&{passive:!0}),a.push([e,i])})),a}function ie(e,t,n){var r=0===e.type.indexOf("touch"),o=0===e.type.indexOf("mouse"),i=0===e.type.indexOf("pointer"),a=0,l=0;if(0===e.type.indexOf("MSPointer")&&(i=!0),"mousedown"===e.type&&!e.buttons&&!e.touches)return!1;if(r){var s=function(t){var r=t.target;return r===n||n.contains(r)||e.composed&&e.composedPath().shift()===n};if("touchstart"===e.type){var u=Array.prototype.filter.call(e.touches,s);if(u.length>1)return!1;a=u[0].pageX,l=u[0].pageY}else{var c=Array.prototype.find.call(e.changedTouches,s);if(!c)return!1;a=c.pageX,l=c.pageY}}return t=t||m(N),(o||i)&&(a=e.clientX+t.x,l=e.clientY+t.y),e.pageOffset=t,e.points=[a,l],e.cursor=o||i,e}function ae(e){var t=e-u(s,n.ort),r=100*t/ne();return r=f(r),n.dir?100-r:r}function le(e){var t=100,n=!1;return c.forEach((function(r,o){if(!H(o)){var i=T[o],a=Math.abs(i-e),l=100===a&&100===t,s=ai;(s||u||l)&&(n=o,t=a)}})),n}function se(e,t){"mouseout"===e.type&&"HTML"===e.target.nodeName&&null===e.relatedTarget&&ce(e,t)}function ue(e,t){if(-1===navigator.appVersion.indexOf("MSIE 9")&&0===e.buttons&&0!==t.buttonsProperty)return ce(e,t);var r=(n.dir?-1:1)*(e.calcPoint-t.startCalcPoint),o=100*r/t.baseSize;Pe(r>0,o,t.locations,t.handleNumbers,t.connect)}function ce(e,t){t.handle&&(g(t.handle,n.cssClasses.active),E-=1),t.listeners.forEach((function(e){I.removeEventListener(e[0],e[1])})),0===E&&(g(L,n.cssClasses.drag),Se(),e.cursor&&(M.style.cursor="",M.removeEventListener("selectstart",i))),n.events.smoothSteps&&(t.handleNumbers.forEach((function(e){Re(e,T[e],!0,!0,!1,!1)})),t.handleNumbers.forEach((function(e){we("update",e)}))),t.handleNumbers.forEach((function(e){we("change",e),we("set",e),we("end",e)}))}function he(e,t){if(!t.handleNumbers.some(H)){var r;if(1===t.handleNumbers.length){var o=c[t.handleNumbers[0]];r=o.children[0],E+=1,v(r,n.cssClasses.active)}e.stopPropagation();var a=[],l=re(O.move,I,ue,{target:e.target,handle:r,connect:t.connect,listeners:a,startCalcPoint:e.calcPoint,baseSize:ne(),pageOffset:e.pageOffset,handleNumbers:t.handleNumbers,buttonsProperty:e.buttons,locations:T.slice()}),s=re(O.end,I,ce,{target:e.target,handle:r,listeners:a,doNotReject:!0,handleNumbers:t.handleNumbers}),u=re("mouseout",I,se,{target:e.target,handle:r,listeners:a,doNotReject:!0,handleNumbers:t.handleNumbers});a.push.apply(a,l.concat(s,u)),e.cursor&&(M.style.cursor=getComputedStyle(e.target).cursor,c.length>1&&v(L,n.cssClasses.drag),M.addEventListener("selectstart",i,!1)),t.handleNumbers.forEach((function(e){we("start",e)}))}}function fe(e){e.stopPropagation();var t=ae(e.calcPoint),r=le(t);!1!==r&&(n.events.snap||h(L,n.cssClasses.tap,n.animationDuration),Re(r,t,!0,!0),Se(),we("slide",r,!0),we("update",r,!0),n.events.snap?he(e,{handleNumbers:[r]}):(we("change",r,!0),we("set",r,!0)))}function de(e){var t=ae(e.calcPoint),n=k.getStep(t),r=k.fromStepping(n);Object.keys(x).forEach((function(e){"hover"===e.split(".")[0]&&x[e].forEach((function(e){e.call(je,r)}))}))}function pe(e,t){if(K()||H(t))return!1;var r=["Left","Right"],o=["Down","Up"],i=["PageDown","PageUp"],a=["Home","End"];n.dir&&!n.ort?r.reverse():n.ort&&!n.dir&&(o.reverse(),i.reverse());var l,s=e.key.replace("Arrow",""),u=s===i[0],c=s===i[1],h=s===o[0]||s===r[0]||u,f=s===o[1]||s===r[1]||c,d=s===a[0],p=s===a[1];if(!h&&!f&&!d&&!p)return!0;if(e.preventDefault(),f||h){var v=h?0:1,g=xe(t),y=g[v];if(null===y)return!1;!1===y&&(y=k.getDefaultStep(T[t],h,n.keyboardDefaultStep)),y*=c||u?n.keyboardPageMultiplier:n.keyboardMultiplier,y=Math.max(y,1e-7),y*=h?-1:1,l=D[t]+y}else l=p?n.spectrum.xVal[n.spectrum.xVal.length-1]:n.spectrum.xVal[0];return Re(t,k.toStepping(l),!0,!0),we("slide",t),we("update",t),we("change",t),we("set",t),!1}function ve(e){e.fixed||c.forEach((function(e,t){re(O.start,e.children[0],he,{handleNumbers:[t]})})),e.tap&&re(O.start,s,fe,{}),e.hover&&re(O.move,s,de,{hover:!0}),e.drag&&p.forEach((function(t,r){if(!1!==t&&0!==r&&r!==p.length-1){var o=c[r-1],i=c[r],a=[t],l=[o,i],s=[r-1,r];v(t,n.cssClasses.draggable),e.fixed&&(a.push(o.children[0]),a.push(i.children[0])),e.dragAll&&(l=c,s=F),a.forEach((function(e){re(O.start,e,he,{handles:l,handleNumbers:s,connect:t})}))}}))}function ge(e,t){x[e]=x[e]||[],x[e].push(t),"update"===e.split(".")[0]&&c.forEach((function(e,t){we("update",t)}))}function ye(e){return e===W.aria||e===W.tooltips}function me(e){var t=e&&e.split(".")[0],n=t?e.substring(t.length):e;Object.keys(x).forEach((function(e){var r=e.split(".")[0],o=e.substring(r.length);t&&t!==r||n&&n!==o||ye(o)&&n!==o||delete x[e]}))}function we(e,t,r){Object.keys(x).forEach((function(o){var i=o.split(".")[0];e===i&&x[o].forEach((function(e){e.call(je,D.map(n.format.to),t,D.slice(),r||!1,T.slice(),je)}))}))}function be(e,t,r,o,i,a,l){var s;return c.length>1&&!n.events.unconstrained&&(o&&t>0&&(s=k.getAbsoluteDistance(e[t-1],n.margin,!1),r=Math.max(r,s)),i&&t1&&n.limit&&(o&&t>0&&(s=k.getAbsoluteDistance(e[t-1],n.limit,!1),r=Math.min(r,s)),i&&t1?o.forEach((function(e,n){var r=be(a,e,a[e]+t,u[n],c[n],!1,s);!1===r?t=0:(t=r-a[e],a[e]=r)})):u=c=[!0];var h=!1;o.forEach((function(e,n){h=Re(e,r[e]+t,u[n],c[n],!1,s)||h})),h&&(o.forEach((function(e){we("update",e),we("slide",e)})),void 0!=i&&we("drag",l))}function Ce(e,t){return n.dir?100-e-t:e}function Oe(e,t){T[e]=t,D[e]=k.fromStepping(t);var r=Ce(t,0)-j,o="translate("+_e(r+"%","0")+")";c[e].style[n.transformRule]=o,Le(e),Le(e+1)}function Se(){F.forEach((function(e){var t=T[e]>50?-1:1,n=3+(c.length+t*e);c[e].style.zIndex=String(n)}))}function Re(e,t,n,r,o,i){return o||(t=be(T,e,t,n,r,!1,i)),!1!==t&&(Oe(e,t),!0)}function Le(e){if(p[e]){var t=0,r=100;0!==e&&(t=T[e-1]),e!==p.length-1&&(r=T[e]);var o=r-t,i="translate("+_e(Ce(t,o)+"%","0")+")",a="scale("+_e(o/100,"1")+")";p[e].style[n.transformRule]=i+" "+a}}function ke(e,t){return null===e||!1===e||void 0===e?T[t]:("number"===typeof e&&(e=String(e)),e=n.format.from(e),!1!==e&&(e=k.toStepping(e)),!1===e||isNaN(e)?T[t]:e)}function De(e,t,r){var o=d(e),i=void 0===T[0];t=void 0===t||t,n.animate&&!i&&h(L,n.cssClasses.tap,n.animationDuration),F.forEach((function(e){Re(e,ke(o[e],e),!0,!1,r)}));var a=1===F.length?0:1;if(i&&k.hasNoSize()&&(r=!0,T[0]=0,F.length>1)){var l=100/(F.length-1);F.forEach((function(e){T[e]=e*l}))}for(;a=0&&er.stepAfter.startValue&&(i=r.stepAfter.startValue-o),a=o>r.thisStep.startValue?r.thisStep.step:!1!==r.stepBefore.step&&o-r.stepBefore.highestStep,100===t?i=null:0===t&&(a=null);var l=k.countStepDecimals();return null!==i&&!1!==i&&(i=Number(i.toFixed(l))),null!==a&&!1!==a&&(a=Number(a.toFixed(l))),[a,i]}function Ne(){return F.map(xe)}function Ie(e,t){var r=Ee(),i=["margin","limit","padding","range","animate","snap","step","format","pips","tooltips"];i.forEach((function(t){void 0!==e[t]&&(a[t]=e[t])}));var l=oe(a);i.forEach((function(t){void 0!==e[t]&&(n[t]=l[t])})),k=l.spectrum,n.margin=l.margin,n.limit=l.limit,n.padding=l.padding,n.pips?te(n.pips):ee(),n.tooltips?X():Y(),T=[],De(o(e.start)?e.start:r,t)}function Me(){s=z(L),G(n.connect,s),ve(n.events),De(n.start),n.pips&&te(n.pips),n.tooltips&&X(),q()}Me();var je={destroy:We,steps:Ne,on:ge,off:me,get:Ee,set:De,setHandle:Fe,reset:Te,__moveHandles:function(e,t,n){Pe(e,t,T,n)},options:a,updateOptions:Ie,target:L,removePips:ee,removeTooltips:Y,getPositions:function(){return T.slice()},getTooltips:function(){return C},getOrigins:function(){return c},pips:te};return je}function ae(e,t){if(!e||!e.nodeName)throw new Error("noUiSlider: create requires a single element, got: "+e);if(e.noUiSlider)throw new Error("noUiSlider: Slider was already initialized.");var n=oe(t),r=ie(e,n,t);return e.noUiSlider=r,r}var le={__spectrum:T,cssClasses:E,create:ae};e.create=ae,e.cssClasses=E,e["default"]=le,Object.defineProperty(e,"__esModule",{value:!0})}))},1:function(e,t){},10:function(e,t){},11:function(e,t){},12:function(e,t){},13:function(e,t){},"13cb":function(e,t,n){},14:function(e,t){},15:function(e,t){},16:function(e,t){},"1b8a":function(e,t,n){"use strict";n("a9a9")},2:function(e,t){},2367:function(e,t,n){"use strict";n("63ec")},"239a":function(e,t,n){},2480:function(e,t,n){"use strict";n("805c")},"24a5":function(e,t,n){"use strict";n("13cb")},"2a51":function(e,t,n){"use strict";n("b883")},"2db3":function(e,t,n){},3:function(e,t){},"336b":function(e,t,n){},3665:function(e,t,n){"use strict";n("e0e8")},3833:function(e,t,n){"use strict";n("4a9e")},"384c":function(e,t,n){e.exports=n.p+"img/CHANNEL.6ac8d4e3.png"},"3d73":function(e,t,n){},4:function(e,t){},"4a9e":function(e,t,n){},"4d3d":function(e,t,n){"use strict";n("2db3")},5:function(e,t){},6:function(e,t){},"62f3":function(e,t,n){"use strict";n("71c3")},"63ec":function(e,t,n){},6651:function(e,t,n){"use strict";n("239a")},"6aa7":function(e,t,n){"use strict";n("c016")},"6c33":function(e,t,n){"use strict";n("f108")},"6d1a":function(e,t,n){"use strict";n("7009")},7:function(e,t){},7009:function(e,t,n){},"71c3":function(e,t,n){},"7d0b":function(e,t,n){"use strict";n("9633")},8:function(e,t){},"805c":function(e,t,n){},"85ec":function(e,t,n){},9:function(e,t){},9633:function(e,t,n){},a78d:function(e,t,n){"use strict";n("336b")},a9a9:function(e,t,n){},b883:function(e,t,n){},c016:function(e,t,n){},c3ec:function(e,t,n){"use strict";n("0022")},cd49:function(e,t,n){"use strict";n.r(t);var r={};n.r(r),n.d(r,"example3",(function(){return Iw})),n.d(r,"example1",(function(){return Mw})),n.d(r,"UpdatedExample",(function(){return jw})),n.d(r,"dafdtemplate",(function(){return Aw})),n.d(r,"default",(function(){return Bw}));var o,i,a,l=n("2b0e"),s=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("v-app",{attrs:{id:"3duf"}},[n("LayoutSidebar")],1)},u=[],c=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",[n("div",{attrs:{id:"view-container"}},[n("div",{attrs:{id:"canvas_block"}},[n("canvas",{ref:"rendingcanvas",attrs:{id:"c",tabindex:"0",resize:""}}),e._t("default",(function(){return[n("ComponentContextMenu",{ref:"contextMenu",attrs:{id:"contextMenu"}})]})),e._t("default",(function(){return[n("ConnectionContextMenu",{ref:"contextMenu",attrs:{id:"contextMenu"}})]}))],2),n("div",{attrs:{id:"renderContainer"}})]),n("ResolutionToolbar"),n("ZoomSlider")],1)},h=[],f=n("7ecf"),d=n.n(f),p=n("2222"),v=n.n(p);function g(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function y(e,t){for(var n=0;n1&&void 0!==arguments[1]?arguments[1]:"FLOW";if("FLOW"===t)return this.__drawFlow(e);if("CELL"===t)return this.__drawCell(e);var n=this.__drawFlow(e),r=this.__drawCell(e),o=new v.a.CompoundPath("");return o.addChild(n),o.addChild(r),o}},{key:"render2DTarget",value:function(e,t){var n=this.__drawFlow(t);return n.addChild(this.__drawCell(t)),n.fillColor.alpha=.5,n}},{key:"__drawFlow",value:function(e){var t,n,r=e.rotation,o=e.position,i=e.chamberLength,a=e.numberOfChambers,l=e.chamberWidth,s=e.feedingChannelWidth,u=e.chamberSpacing,c=e.color,h=o[0],f=o[1],d=new v.a.CompoundPath("");d.fillColor=c;var p=new v.a.Point(h,f+i);return n=new v.a.Path.Rectangle({point:p,size:[a/2*(l+u)+u,s],fillColor:c,strokeWidth:0}),d.addChild(n),t=new v.a.CompoundPath(d),t.fillColor=c,t.rotate(r,new v.a.Point(h,f)),t}},{key:"__drawCell",value:function(e){for(var t,n=e.rotation,r=e.position,o=e.chamberLength,i=e.numberOfChambers,a=e.chamberWidth,l=e.feedingChannelWidth,s=e.chamberSpacing,u=e.color,c=r[0],h=r[1],f=new v.a.CompoundPath(""),d=0;d8&&void 0!==arguments[8]&&arguments[8],u=i/2,c=t-.5*i,h=n+r+o,f=t+.5*i,d=n+r+o;a===l&&(s=!0),this.__drawmuxtwig(e,t,n,r,o,i,s),s||(this.__generateMuxTwig(e,c,h,r,o,u,a+1,l),this.__generateMuxTwig(e,f,d,r,o,u,a+1,l))}},{key:"__drawmuxtwig",value:function(e,t,n,r,o,i){var a=arguments.length>6&&void 0!==arguments[6]&&arguments[6],l=new v.a.Point(t-r/2,n),s=new v.a.Point(t+r/2,n+o),u=new v.a.Path.Rectangle({from:l,to:s,radius:0,strokeWidth:0});e.addChild(u);var c=t-.5*(r+i),h=c+r,f=n+o+r,d=f+o,p=t+.5*(i-r),g=p+r,y=n+o+r,m=y+o;a&&(l=new v.a.Point(c,f),s=new v.a.Point(h,d),u=new v.a.Path.Rectangle({from:l,to:s,radius:0,strokeWidth:0}),e.addChild(u),l=new v.a.Point(p,y),s=new v.a.Point(g,m),u=new v.a.Path.Rectangle({from:l,to:s,radius:0,strokeWidth:0}),e.addChild(u));var w=t-.5*(r+i),b=g,_=n+o,P=_+r;return l=new v.a.Point(w,_),s=new v.a.Point(b,P),u=new v.a.Path.Rectangle({from:l,to:s,radius:0,strokeWidth:0}),e.addChild(u),e}},{key:"__generateMuxControlTwig",value:function(e,t,n,r,o,i,a,l,s,u,c,h,f){var d=arguments.length>13&&void 0!==arguments[13]&&arguments[13],p=a/2,v=t-.5*a,g=n+r+i,y=t+.5*a,m=n+r+i;l===s&&(d=!0),this.__drawmuxcontroltwig(e,t,n,r,o,i,a,u,c,h,f,d),d||(this.__generateMuxControlTwig(e,v,g,r,o,i,p,l+1,s,u,c,h,f),this.__generateMuxControlTwig(e,y,m,r,o,i,p,l+1,s,u,c,h,f))}},{key:"__drawmuxcontroltwig",value:function(e,t,n,r,o,i,a,l,s,u,c){var h=t-.5*(r+a),f=h+r,d=n+i+r,p=d+i,g=(h+f)/2,y=d+Math.abs(d-p)/4,m=t+.5*(a-r),w=m+r,b=n+i+r,_=b+i,P=(m+w)/2,C=b+3*Math.abs(b-_)/4,O=new v.a.Point(g-l/2,y-s/2),S=new v.a.Point(g+l/2,y+l/2),R=new v.a.Path.Rectangle({from:O,to:S,radius:0,strokeWidth:0});e.addChild(R);var L=new v.a.Point(O.x,y-o/2),k=new v.a.Point(u,y+o/2),D=new v.a.Path.Rectangle({from:L,to:k,radius:0,strokeWidth:0});e.addChild(D),O=new v.a.Point(P-l/2,C-s/2),S=new v.a.Point(P+l/2,C+l/2),R=new v.a.Path.Rectangle({from:O,to:S,radius:0,strokeWidth:0}),e.addChild(R);var T=new v.a.Point(S.x,C-o/2),F=new v.a.Point(c,C+o/2),E=new v.a.Path.Rectangle({from:T,to:F,radius:0,strokeWidth:0});return e.addChild(E),e}}]),n}(O);function pr(e){return pr="function"===typeof Symbol&&"symbol"===typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"===typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},pr(e)}function vr(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function gr(e,t){for(var n=0;n1&&void 0!==arguments[1]?arguments[1]:"FLOW";if("FLOW"===t)return this.__drawFlow(e);if("CONTROL"===t)return this.__drawControl(e);throw new Error("Unknown key: "+t)}},{key:"render2DTarget",value:function(e,t){var n=new v.a.CompoundPath(""),r=this.render2D(t,"FLOW"),o=this.render2D(t,"CONTROL");return n.addChild(o),n.addChild(r),n.fillColor=t.color,n.fillColor.alpha=.5,n}}]),n}(O);function Rr(e){return Rr="function"===typeof Symbol&&"symbol"===typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"===typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Rr(e)}function Lr(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function kr(e,t){for(var n=0;n1&&void 0!==arguments[1]?arguments[1]:"FLOW";if("FLOW"===t)return this.__drawFlow(e);if("CONTROL"===t)return this.__drawControl(e);if("INVERSE"===t)return this.__drawInverse(e);throw new Error("Unknown key: "+t)}},{key:"render2DTarget",value:function(e,t){var n=new v.a.CompoundPath(""),r=this.render2D(t,"FLOW"),o=this.render2D(t,"CONTROL");return n.addChild(o),n.addChild(r),n.fillColor=t.color,n.fillColor.alpha=.5,n}},{key:"__drawFlow",value:function(e){var t,n,r,o,i=new v.a.CompoundPath(""),a=e.position,l=e.gap,s=e.valveRadius,u=e.color,c=e.rotation,h=e.spacing,f=e.flowChannelWidth;o=new v.a.Point(a[0],a[1]),r=new v.a.Path.Circle(o,s),n=new v.a.Path.Rectangle({from:new v.a.Point(a[0]-s,a[1]-l/2),to:new v.a.Point(a[0]+s,a[1]+l/2)}),t=r.subtract(n),i.addChild(t);var d=new v.a.Point(a[0],a[1]+h);r=new v.a.Path.Circle(d,s),n=new v.a.Path.Rectangle({from:new v.a.Point(d.x-s,d.y-l/2),to:new v.a.Point(d.x+s,d.y+l/2)}),t=r.subtract(n),i.addChild(t);var p=new v.a.Point(a[0],a[1]-h);r=new v.a.Path.Circle(p,s),n=new v.a.Path.Rectangle({from:new v.a.Point(p.x-s,p.y-l/2),to:new v.a.Point(p.x+s,p.y+l/2)}),t=r.subtract(n),i.addChild(t);var g=new v.a.Path.Rectangle({from:new v.a.Point(d.x-f/2,d.y-l/2),to:new v.a.Point(o.x+f/2,o.y+l/2)});i.addChild(g);var y=new v.a.Path.Rectangle({from:new v.a.Point(p.x-f/2,p.y+l/2),to:new v.a.Point(o.x+f/2,o.y-l/2)});return i.addChild(y),i.rotate(c,o),i.fillColor=u,i}},{key:"__drawControl",value:function(e){var t,n=e.position,r=e.valveRadius,o=e.color,i=e.rotation,a=e.spacing,l=new v.a.CompoundPath(""),s=new v.a.Point(n[0],n[1]);t=new v.a.Path.Circle(s,r),l.addChild(t);var u=new v.a.Point(n[0],n[1]-a);t=new v.a.Path.Circle(u,r),l.addChild(t);var c=new v.a.Point(n[0],n[1]+a);return t=new v.a.Path.Circle(c,r),l.addChild(t),l.rotate(i,s),l.fillColor=o,l}},{key:"__drawInverse",value:function(e){var t,n=e.position,r=e.valveRadius,o=e.color,i=e.rotation,a=e.spacing,l=new v.a.CompoundPath(""),s=new v.a.Point(n[0],n[1]);t=new v.a.Path.Circle(s,r),l.addChild(t);var u=new v.a.Point(n[0],n[1]-a);t=new v.a.Path.Circle(u,r),l.addChild(t);var c=new v.a.Point(n[0],n[1]+a);return t=new v.a.Path.Circle(c,r),l.addChild(t),l.rotate(i,s),l.fillColor=o,l}}]),n}(O);function jr(e){return jr="function"===typeof Symbol&&"symbol"===typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"===typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},jr(e)}function Ar(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function Vr(e,t){for(var n=0;n1&&void 0!==arguments[1]?arguments[1]:"FLOW";if("FLOW"===t)return this.__drawFlow(e);if("CONTROL"===t)return this.__drawControl(e);throw new Error("Unknown key: "+t)}},{key:"render2DTarget",value:function(e,t){var n=new v.a.CompoundPath(""),r=this.render2D(t,"FLOW"),o=this.render2D(t,"CONTROL");return n.addChild(o),n.addChild(r),n.fillColor=t.color,n.fillColor.alpha=.5,n}},{key:"__drawFlow",value:function(e){var t=e.position,n=e.valveGap,r=e.valveRadius,o=e.color,i=e.rotation,a=e.flowChannelWidth,l=e.valveSpacing,s=new v.a.CompoundPath(""),u=t[0],c=t[1],h=new v.a.Point(u,c-a/2),f=new v.a.Point(u+4*l+2*r+2*a,c+a/2),d=new v.a.Path.Rectangle(h,f);return s.addChild(d),this.__createTransposerValve(s,f.x+r,h.y+a/2,n,r,"H",a),h=new v.a.Point(u+4*l+4*r+2*a,c-a/2),f=new v.a.Point(u+6*l+4*r+3*a,c+a/2),d=new v.a.Path.Rectangle(h,f),s.addChild(d),h=new v.a.Point(u+3*l+a+2*r,c+a/2),f=new v.a.Point(h.x+a,h.y+l),d=new v.a.Path.Rectangle(h,f),s.addChild(d),this.__createTransposerValve(s,h.x+a/2,f.y+r,n,r,"V",a),h=new v.a.Point(h.x,f.y+2*r),f=new v.a.Point(h.x+a,h.y+2*l+a),d=new v.a.Path.Rectangle(h,f),s.addChild(d),this.__createTransposerValve(s,h.x+a/2,f.y+r,n,r,"V",a),h=new v.a.Point(h.x,f.y+2*r),f=new v.a.Point(h.x+a,h.y+l),d=new v.a.Path.Rectangle(h,f),s.addChild(d),h=new v.a.Point(u,c+1.5*a+4*l+4*r),f=new v.a.Point(h.x+2*l+a,h.y+a),d=new v.a.Path.Rectangle(h,f),s.addChild(d),this.__createTransposerValve(s,f.x+r,h.y+a/2,n,r,"H",a),h=new v.a.Point(f.x+2*r,h.y),f=new v.a.Point(h.x+4*l+2*a+2*r,h.y+a),d=new v.a.Path.Rectangle(h,f),s.addChild(d),h=new v.a.Point(u+5*l+2*a+4*r,c+a/2),f=new v.a.Point(h.x+a,h.y+l),d=new v.a.Path.Rectangle(h,f),s.addChild(d),this.__createTransposerValve(s,h.x+a/2,f.y+r,n,r,"V",a),h=new v.a.Point(h.x,f.y+2*r),f=new v.a.Point(h.x+a,h.y+l+a),d=new v.a.Path.Rectangle(h,f),s.addChild(d),s.fillColor=o,h=new v.a.Point(u+l,c+1.5*a+2*l+2*r),f=new v.a.Point(h.x+a,h.y+l),d=new v.a.Path.Rectangle(h,f),s.addChild(d),this.__createTransposerValve(s,h.x+a/2,f.y+r,n,r,"V",a),h=new v.a.Point(h.x,f.y+2*r),f=new v.a.Point(h.x+a,h.y+l+a),d=new v.a.Path.Rectangle(h,f),s.addChild(d),s.fillColor=o,s.rotate(i,new v.a.Point(u+3*l+1.5*a+2*r,c+a+2*l+2*r)),s}},{key:"__createTransposerValve",value:function(e,t,n,r,o,i,a){var l=new v.a.Point(t,n),s=new v.a.Path.Circle(l,o),u=new v.a.Path.Rectangle({point:new v.a.Point(t-a/2,n-o),size:[a,o],stokeWidth:0});s=s.unite(u),u=new v.a.Path.Rectangle({point:new v.a.Point(t-a/2,n),size:[a,o],stokeWidth:0}),s=s.unite(u);var c=new v.a.Path.Rectangle({from:new v.a.Point(t-o,n-r/2),to:new v.a.Point(t+o,n+r/2)}),h=s.subtract(c);"H"===i&&h.rotate(90,l),e.addChild(h)}},{key:"__drawControl",value:function(e){var t=e.position,n=(e.valveGap,e.valveRadius),r=e.color,o=e.rotation,i=e.controlChannelWidth,a=e.valveSpacing,l=new v.a.CompoundPath(""),s=t[0],u=t[1],c=new v.a.Point(s+4*a+2*i+2*n+n,u),h=new v.a.Path.Circle(c,n);l.addChild(h);var f=new v.a.Point(s+4*a+2*i+2*n+n-i/2,u-2*n),d=new v.a.Point(s+4*a+2*i+2*n+n+i/2,u);l.addChild(new v.a.Path.Rectangle(f,d)),f=new v.a.Point(s-2*n,u-2*n-i/2),d=new v.a.Point(s+4*a+2*i+2*n+n+i/2,u-2*n+i/2),l.addChild(new v.a.Path.Rectangle(f,d)),c=new v.a.Point(s+1.5*i+3*a+2*n,u+i/2+a+n),h=new v.a.Path.Circle(c,n),l.addChild(h);var p=c;c=new v.a.Point(c.x+2*a+2*n+i,u+i/2+a+n),h=new v.a.Path.Circle(c,n),l.addChild(h);var g=c,y=new v.a.Path.Rectangle({from:new v.a.Point(p.x,p.y-i/2),to:new v.a.Point(g.x,p.y+i/2)});l.addChild(y),f=new v.a.Point(g.x,p.y-i/2),d=new v.a.Point(g.x+2*n,p.y+i/2),l.addChild(new v.a.Path.Rectangle(f,d)),f=new v.a.Point(g.x+2*n-i/2,p.y-i/2),d=new v.a.Point(g.x+2*n+i/2,u+1.5*i+3*a+2*n+n),l.addChild(new v.a.Path.Rectangle(f,d)),c=new v.a.Point(s+.5*i+a,u+1.5*i+3*a+2*n+n),h=new v.a.Path.Circle(c,n),l.addChild(h),p=c,c=new v.a.Point(c.x+2*a+2*n+i,c.y),h=new v.a.Path.Circle(c,n),l.addChild(h),g=c,y=new v.a.Path.Rectangle({from:new v.a.Point(p.x,p.y-i/2),to:new v.a.Point(g.x,p.y+i/2)}),l.addChild(y),f=new v.a.Point(g.x,p.y-i/2),d=new v.a.Point(c.x+2*a+4*n+i+i/2,p.y+i/2),l.addChild(new v.a.Path.Rectangle(f,d)),c=new v.a.Point(s+i+2*a+n,u+4*a+4*n+2*i),h=new v.a.Path.Circle(c,n),l.addChild(h),f=new v.a.Point(s-2*n-i/2,u-2*n-i/2),d=new v.a.Point(s-2*n+i/2,u+4*a+6*n+2*i),l.addChild(new v.a.Path.Rectangle(f,d)),f=new v.a.Point(s-2*n-i/2,u+4*a+6*n+2*i-i/2),d=new v.a.Point(s+i+2*a+n,u+4*a+6*n+2*i+i/2),l.addChild(new v.a.Path.Rectangle(f,d)),f=new v.a.Point(s+i+2*a+n-i/2,u+4*a+4*n+2*i),d=new v.a.Point(s+i+2*a+n+i/2,u+4*a+6*n+2*i+i/2),l.addChild(new v.a.Path.Rectangle(f,d));var m=new v.a.Point(s+a,u+i/2+2*n+2*a),w=new v.a.Point(m.x+4*a+3*i+4*n,m.y+i),b=new v.a.Path.Rectangle(m,w);return l.addChild(b),l.rotate(o,new v.a.Point(s+3*a+1.5*i+2*n,u+i+2*a+2*n)),l.fillColor=r,l}}]),n}(O);function Wo(e){return Wo="function"===typeof Symbol&&"symbol"===typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"===typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Wo(e)}function xo(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function No(e,t){for(var n=0;n1&&void 0!==arguments[1]?arguments[1]:"FLOW";if("FLOW"===t)return this.__drawFlow(e);if("CONTROL"===t)return this.__drawControl(e);if("INVERSE"===t)return this.__drawInverseFlow(e);throw new Error("No render procedure defined for component:"+this.__mint+", key: "+t)}},{key:"render2DTarget",value:function(e,t){var n=this.render2D(t,"FLOW");return n.fillColor.alpha=.5,n}},{key:"__drawInverseFlow",value:function(e){var t=e.position,n=(e.gap,e.valveRadius),r=e.color;console.log("Color:",r);var o=e.rotation,i=new v.a.Point(t[0],t[1]),a=new v.a.Path.Circle(i,n);return a.fillColor=r,a.rotate(o,i)}}]),n}(Uo);function vi(e){return vi="function"===typeof Symbol&&"symbol"===typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"===typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},vi(e)}function gi(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function yi(e,t){for(var n=0;n8&&void 0!==arguments[8]&&arguments[8],u=i/2,c=t-.5*i,h=n+r+o,f=t+.5*i,d=n+r+o;a===l&&(s=!0),this.__drawtwig(e,t,n,r,o,i,s),s||(this.__generateTwig(e,c,h,r,o,u,a+1,l),this.__generateTwig(e,f,d,r,o,u,a+1,l))}},{key:"__drawtwig",value:function(e,t,n,r,o,i){var a=arguments.length>6&&void 0!==arguments[6]&&arguments[6],l=new v.a.Point(t-r/2,n),s=new v.a.Point(t+r/2,n+o),u=new v.a.Path.Rectangle({from:l,to:s,radius:0,strokeWidth:0});e.addChild(u);var c=t-.5*(r+i),h=c+r,f=n+o+r,d=f+o,p=t+.5*(i-r),g=p+r,y=n+o+r,m=y+o;a&&(l=new v.a.Point(c,f),s=new v.a.Point(h,d),u=new v.a.Path.Rectangle({from:l,to:s,radius:0,strokeWidth:0}),e.addChild(u),l=new v.a.Point(p,y),s=new v.a.Point(g,m),u=new v.a.Path.Rectangle({from:l,to:s,radius:0,strokeWidth:0}),e.addChild(u));var w=t-.5*(r+i),b=g,_=n+o,P=_+r;return l=new v.a.Point(w,_),s=new v.a.Point(b,P),u=new v.a.Path.Rectangle({from:l,to:s,radius:0,strokeWidth:0}),e.addChild(u),e}},{key:"render2DTarget",value:function(e,t){null===e&&(e=this.__renderKeys[0]);var n=this.render2D(t,e);return n.fillColor.alpha=.5,n}}]),n}(O);function Li(e){return Li="function"===typeof Symbol&&"symbol"===typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"===typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Li(e)}function ki(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function Di(e,t){for(var n=0;n8&&void 0!==arguments[8]&&arguments[8],u=i/2,c=t-.5*i,h=n+o,f=t+.5*i,d=n+o;a===l&&(s=!0),this.__drawYtwig(e,t,n,r,o,i,s),s||(this.__generateYTwig(e,c,h,r,o,u,a+1,l),this.__generateYTwig(e,f,d,r,o,u,a+1,l))}},{key:"__drawYtwig",value:function(e,t,n,r,o,i){var a=new v.a.Point(t,n),l=new v.a.Point(t-r/2,n-r/2),s=Math.atan(i/2/o),u=i/2/Math.sin(s)+r,c=new v.a.Path.Rectangle({size:[r,u],point:l,radius:r/2,stokeWidth:0});return c.rotate(180*s/Math.PI,a),e.addChild(c),c=new v.a.Path.Rectangle({size:[r,u],point:l,radius:r/2,stokeWidth:0}),c.rotate(180*-s/Math.PI,a),e.addChild(c),e}}]),n}(O);function Ai(e){return Ai="function"===typeof Symbol&&"symbol"===typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"===typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Ai(e)}function Vi(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function Bi(e,t){for(var n=0;n1&&void 0!==arguments[1]?arguments[1]:"FLOW";if("FLOW"===t)return this.__renderFlow(e);if("CONTROL"===t)return this.__renderControl(e);throw new Error("Unknown render key found in LLCHAMBER: "+t)}},{key:"render2DTarget",value:function(e,t){var n=new v.a.CompoundPath(""),r=this.render2D(t,"FLOW"),o=this.render2D(t,"CONTROL");return n.addChild(o),n.addChild(r),n.fillColor=t.color,n.fillColor.alpha=.5,n}}]),n}(O);function $i(e){return $i="function"===typeof Symbol&&"symbol"===typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"===typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},$i(e)}function Zi(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function Qi(e,t){for(var n=0;n1&&void 0!==arguments[1]?arguments[1]:"FLOW";if("FLOW"===t)return this.__renderFlow(e);if("INTEGRATION"===t)return this.__renderIntegrate(e);throw new Error("Unknown render key found in DROPLET MERGER: "+t)}},{key:"render2DTarget",value:function(e,t){var n=new v.a.CompoundPath(""),r=this.render2D(t,"FLOW"),o=this.render2D(t,"INTEGRATION");return n.addChild(o),n.addChild(r),n.fillColor=t.color,n.fillColor.alpha=.5,n}}]),n}(O);function Al(e){return Al="function"===typeof Symbol&&"symbol"===typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"===typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Al(e)}function Vl(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function Bl(e,t){for(var n=0;n1&&void 0!==arguments[1]?arguments[1]:"FLOW";if("FLOW"===t)return this.__renderFlow(e);if("INTEGRATION"===t)return this.__renderIntegrate(e);throw new Error("Unknown render key found in PICOINJECTOR: "+t)}},{key:"render2DTarget",value:function(e,t){var n=new v.a.CompoundPath(""),r=this.render2D(t,"FLOW"),o=this.render2D(t,"INTEGRATION");return n.addChild(o),n.addChild(r),n.fillColor=t.color,n.fillColor.alpha=.5,n}}]),n}(O);function $l(e){return $l="function"===typeof Symbol&&"symbol"===typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"===typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},$l(e)}function Zl(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function Ql(e,t){for(var n=0;n1&&void 0!==arguments[1]?arguments[1]:"FLOW";if("FLOW"===t)return this.__renderFlow(e);if("INTEGRATION"===t)return this.__renderIntegrate(e);throw new Error("Unknown render key found in DROPLET SORTER: "+t)}},{key:"render2DTarget",value:function(e,t){var n=new v.a.CompoundPath(""),r=this.render2D(t,"FLOW"),o=this.render2D(t,"INTEGRATION");return n.addChild(o),n.addChild(r),n.fillColor=t.color,n.fillColor.alpha=.5,n}}]),n}(O);function us(e){return us="function"===typeof Symbol&&"symbol"===typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"===typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},us(e)}function cs(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function hs(e,t){for(var n=0;n1&&void 0!==arguments[1]?arguments[1]:"FLOW";if("FLOW"===t)return this.__renderFlow(e);if("INTEGRATION"===t)return this.__renderIntegrate(e);throw new Error("Unknown render key found in DROPLET CAPACITANCE SENSOR: "+t)}},{key:"render2DTarget",value:function(e,t){var n=new v.a.CompoundPath(""),r=this.render2D(t,"FLOW"),o=this.render2D(t,"INTEGRATION");return n.addChild(o),n.addChild(r),n.fillColor=t.color,n.fillColor.alpha=.5,n}}]),n}(O);function _s(e){return _s="function"===typeof Symbol&&"symbol"===typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"===typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},_s(e)}function Ps(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function Cs(e,t){for(var n=0;n0)return n;throw new Error("No render type found for mint type: "+t)}},{key:"getComponentPorts",value:function(t,n){var r=e.getTypeForMINT(n);null===r&&(console.error("Component Ports of: "+r+" not found in library. Using default Template"),r="Template");var o=e.library[r].object,i={};t.forEach((function(e,t){i[t]=e}));var a=o.getPorts(i);return a}},{key:"hasInverseRenderLayer",value:function(t){var n=e.library[t].object,r=n.renderKeys;return r.includes("INVERSE")}},{key:"getDefaultsForType",value:function(t){if(Object.prototype.hasOwnProperty.call(e.library,t))return e.library[t].object.defaults;throw new Error("Component Type definition: "+t+" not found in library")}},{key:"getHeritableForType",value:function(t){if(Object.prototype.hasOwnProperty.call(e.library,t))return e.library[t].object.heritable;throw new Error("Component Type definition: "+t+" not found in library")}},{key:"getUniqueForType",value:function(t){if(Object.prototype.hasOwnProperty.call(e.library,t))return e.library[t].object.unique;throw new Error("Component Type definition: "+t+" not found in library")}},{key:"isCustomType",value:function(t){return t in e.customTypes.keys()}},{key:"generateID",value:function(){return d.a.v1()}},{key:"getRenderer",value:function(t){if(Object.prototype.hasOwnProperty.call(e.library,t))return e.library[t].object;throw new Error("Component Type definition: "+t+" not found in library")}},{key:"getRendererForMINT",value:function(t){for(var n in e.library)if(e.library[n].object.mint===t)return console.log("Renderer: ",e.library[n].object),e.library[n].object;throw new Error("Component Type definition: "+t+" not found in library")}},{key:"getRendererInfo",value:function(t){if(Object.prototype.hasOwnProperty.call(e.library,t))return e.library[t];throw new Error("Component Type definition: "+t+" not found in library")}},{key:"getAllRenderKeys",value:function(t){return e.library[t].object.renderKeys}},{key:"getConnectionTypes",value:function(){var t=[];for(var n in e.connectionLibrary){var r=e.connectionLibrary[n];t.push(r.object.mint)}return t}}]),e}();function Fc(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function Ec(e,t){for(var n=0;n1&&void 0!==arguments[1]?arguments[1]:"New Layer",r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:o.FLOW,i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"0",a=arguments.length>4?arguments[4]:void 0;Uc(this,e),this.__type=o.FLOW,this.params=new zc(t,e.getUniqueParameters(),e.getHeritableParameters()),this.name=n,this.features={},this.featureCount=0,this.device=a,this.__id=Tc.generateID(),this.__type=r,this.__group=i}return Hc(e,[{key:"type",get:function(){return this.__type}},{key:"id",get:function(){return this.__id},set:function(e){this.__id=e}},{key:"group",get:function(){return this.__group}},{key:"addFeature",value:function(e){this.__ensureIsAFeature(e),this.features[e.ID]=e,this.featureCount+=1,e.layer=this,e.setManufacturingInfoLayer()}},{key:"getIndex",value:function(){if(this.device)return this.device.layers.indexOf(this);throw new Error("No device referenced on this layer")}},{key:"__ensureIsAFeature",value:function(e){if(!(e instanceof Bd)&&!(e instanceof Qd))throw new Error("Provided value"+e+" is not a Feature! Did you pass an ID by mistake?")}},{key:"__ensureFeatureExists",value:function(e){if(!this.containsFeature(e))throw new Error("Layer does not contain the specified feature!")}},{key:"__ensureFeatureIDExists",value:function(e){if(!this.containsFeatureID(e))throw new Error("Layer does not contain a feature with the specified ID!")}},{key:"getFeature",value:function(e){return this.__ensureFeatureIDExists(e),this.features[e]}},{key:"removeFeature",value:function(e){var t;(this.removeFeatureByID(e.ID),console.log("Device: ",this.device),null!==this.device||void 0!==this.device)&&(null===(t=this.device)||void 0===t||t.removeFeature(e))}},{key:"removeFeatureByID",value:function(e){this.__ensureFeatureIDExists(e);this.features[e];this.featureCount-=1,delete this.features[e]}},{key:"containsFeature",value:function(e){return this.__ensureIsAFeature(e),this.features.hasOwnProperty(e.ID)}},{key:"containsFeatureID",value:function(e){return this.features.hasOwnProperty(e)}},{key:"getAllFeaturesFromLayer",value:function(){return this.features}},{key:"__featuresToJSON",value:function(){var e={};for(var t in this.features)e[t]=this.features[t].toJSON();return e}},{key:"__featuresInterchangeV1",value:function(){var e=[];for(var t in this.features)e.push(this.features[t].toInterchangeV1());return e}},{key:"__loadFeaturesFromJSON",value:function(e){for(var t in e)this.addFeature(Bd.fromJSON(e[t]))}},{key:"__loadFeaturesFromInterchangeV1",value:function(e){for(var t in e)this.addFeature(Bd.fromInterchangeV1(e[t]))}},{key:"toJSON",value:function(){var e={};return e.name=this.name,e.params=this.params.toJSON(),e.features=this.__featuresToJSON(),e}},{key:"toInterchangeV1",value:function(){var e="FLOW";if(this.type===o.FLOW)e="FLOW";else if(this.type===o.CONTROL)e="CONTROL";else{if(this.type!==o.INTEGRATION)throw new Error("Unknown layer type: "+this.type);e="INTEGRATION"}var t={id:this.__id,name:this.name,type:e,group:this.__group,params:this.params.toJSON(),features:this.__featuresInterchangeV1()};return t}},{key:"toFeatureLayerJSON",value:function(){var e={};return e.name=this.name,e.params=this.params.toJSON(),e.features=this.__featuresInterchangeV1(),e}}],[{key:"getUniqueParameters",value:function(){var e=new Map;return e.set("z_offset","Float"),e.set("flip","Boolean"),e}},{key:"getHeritableParameters",value:function(){return new Map}},{key:"fromInterchangeV1",value:function(t,n){var r=o.FLOW;if(Object.prototype.hasOwnProperty.call(t,"type"))if("FLOW"===t.type)r=o.FLOW;else if("CONTROL"===t.type)r=o.CONTROL;else{if("INTEGRATION"!==t.type)throw new Error("Unknown layer type: "+t.type);r=o.INTEGRATION}var i=new e(t.params,t.name,r,t.group,n);return i.__loadFeaturesFromInterchangeV1(t.features),i}}]),e}();function Xc(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function qc(e,t){for(var n=0;n=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,a=!0,l=!1;return{s:function(){n=n.call(e)},n:function(){var e=n.next();return a=e.done,e},e:function(e){l=!0,i=e},f:function(){try{a||null==n.return||n.return()}finally{if(l)throw i}}}}function ah(e,t){if(e){if("string"===typeof e)return lh(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?lh(e,t):void 0}}function lh(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,a=!0,l=!1;return{s:function(){n=n.call(e)},n:function(){var e=n.next();return a=e.done,e},e:function(e){l=!0,i=e},f:function(){try{a||null==n.return||n.return()}finally{if(l)throw i}}}}function $h(e,t){if(e){if("string"===typeof e)return Zh(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?Zh(e,t):void 0}}function Zh(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n1&&(r=1),console.log("feature Object:",e),console.log("feature layer:",e.layer),console.log("feature layer type:",e.layer.type),!e.layer)throw new Error("Feature layer is null");var o=jh(e.layer.type);return Mh(r,o,Th)},ef=function(e){var t=0;if(!e.layer)throw new Error("Feature layer is null");var n=jh(e.layer.type);return Mh(t,n,Th)};function tf(e,t){return Tc.getDefaultsForType(e)[t]}function nf(e,t){var n,r,o,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null;if(null===(null===(n=zh.viewManager)||void 0===n?void 0:n.currentLayer)||void 0===(null===(r=zh.viewManager)||void 0===r?void 0:r.currentLayer))throw console.error("No current layer"),new Error("No current layer");var a=Tc.getRendererInfo(e),l=a.object,s=l.targetParams,u={};if(null!==i){var c,h=Jh(i);try{for(h.s();!(c=h.n()).done;){var f=c.value;u[f.name]=f.value}}catch(g){h.e(g)}finally{h.f()}}else for(var d in s)u[d]=tf(e,s[d]);u["position"]=t,u["color"]=new v.a.Color(Ah(e,null===(o=zh.viewManager)||void 0===o?void 0:o.currentLayer));var p=l.render2DTarget(null,u);return p}function rf(e,t){if(null===zh.viewManager)throw console.error("Registry.viewManager is null"),new Error("Registry.viewManager is null");var n=new v.a.PointText(new v.a.Point(t[0],t[1]));return n.justification="center",n.fillColor=new v.a.Color(Ch),n.content=zh.viewManager.tools.InsertTextTool.text,n.fontSize=1e4,n}function of(e){Uh(e)}function af(e){var t=e.getValue("position"),n=new v.a.PointText(new v.a.Point(t[0],t[1]));if(n.justification="center",void 0!=e.getParams().color){var r=e.getParams().color.value;if("white"==r||"White"==r||"WHITE"==r)n.fillColor=new v.a.Color(Dh);else if("black"==r||"Black"==r||"BLACK"==r)n.fillColor=new v.a.Color(kh);else if("blue"==r||"Blue"==r||"BLUE"==r)n.fillColor=new v.a.Color(Rh);else{if("red"!=r&&"Red"!=r&&"RED"!=r)throw new Error("Color choice "+r+" not enabled");n.fillColor=new v.a.Color(Ph)}}else n.fillColor=new v.a.Color(Qh(e));n.content=e.getValue("text"),n.fontSize=e.getValue("fontSize");var o=n;return o["featureID"]=e.ID,o}function lf(e,t){var n,r,o=e.getType();if(Tc.isCustomType(o)){"Custom",n=fh(e,ef(e));var i=n;return i["featureID"]=e.ID,i}if("EDGE"===o)return of(e);if("Text"===o)return af(e);var a=Tc.getRendererInfo(o),l=Tc.getRenderer(o);t&&null!==t||(t=a.key),l?r=l.featureParams:console.error("Could not find renderer method for feature:",e);var s={};for(var u in r)s[u]=e.getValue(r[u]);s.color=Qh(e),s.baseColor=ef(e),n=l.render2D(s,t);var c=n;return c["featureID"]=e.ID,c}function sf(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function uf(e,t){for(var n=0;n=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,a=!0,l=!1;return{s:function(){n=n.call(e)},n:function(){var e=n.next();return a=e.done,e},e:function(e){l=!0,i=e},f:function(){try{a||null==n.return||n.return()}finally{if(l)throw i}}}}function yf(e,t){if(e){if("string"===typeof e)return mf(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?mf(e,t):void 0}}function mf(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n3&&void 0!==arguments[3]?arguments[3]:Tc.generateID();wf(this,e),this._params=t,this._name=n,this._id=o,this._entity=r,this._featureIDs=[],this._bounds=null,this._placed=!1,this._ports=new Map,this._componentPortTRenders=new Map,this._xspan=0,this._yspan=0,this._renderOffset=[0,0];var i=this._params.toMap();if(""!==r&&"TEXT"!==r||null===r){var a=Tc.getComponentPorts(i,r);if(void 0!=a&&a.length>=0&&null!==a){var l,s=gf(a);try{for(s.s();!(l=s.n()).done;){var u=l.value;this.setPort(u.label,u)}}catch(c){s.e(c)}finally{s.f()}}}else console.warn("Component mint is empty")}return _f(e,[{key:"mint",get:function(){return this._entity}},{key:"offset",get:function(){return this._renderOffset}},{key:"ports",get:function(){return this._ports},set:function(e){this._ports=e}},{key:"placed",get:function(){return this._placed},set:function(e){this._placed=e}},{key:"featureIDs",get:function(){return this._featureIDs}},{key:"setBounds",value:function(e){this._bounds=e;var t=e.topLeft;this._params.updateParameter("position",[t.x,t.y]),this._params.updateParameter("xspan",e.width),this._params.updateParameter("yspan",e.height)}},{key:"updateParameter",value:function(e,t){"position"==e&&console.error("Use updateComponentPosition instead of updateParameter when changing position"),this._params.updateParameter(e,t);var n,r=gf(this._featureIDs);try{for(r.s();!(n=r.n()).done;){var o=n.value,i=hf.getFeatureFromID(o);i.updateParameter(e,t)}}catch(a){r.e(a)}finally{r.f()}hf.getFeatureFromID(this._featureIDs[0]).getValue("position");this.setPosition(),this.setOffset(),this.updateComponentPorts()}},{key:"toInterchangeV1",value:function(){this.getBoundingRectangle();var e=[],t=this.ports;if(null!==t){var n,r=gf(t.keys());try{for(r.s();!(n=r.n()).done;){var o=n.value,i=t.get(o);if(void 0!=i){var a=i.toInterchangeV1();e.push(a)}}}catch(s){r.e(s)}finally{r.f()}}var l={id:this._id,name:this._name,entity:this._entity,params:this._params.toJSON(),"x-span":this._xspan,"y-span":this._yspan,ports:e,layers:this.findLayerReferences()};return l}},{key:"findLayerReferences",value:function(){var e,t=hf.getDeviceLayers(),n=[],r=gf(t);try{for(r.s();!(e=r.n()).done;){var o=e.value,i=void 0;for(var a in o.features)i=o.features[a],i.referenceID==this.id&&n.push(o.id)}}catch(l){r.e(l)}finally{r.f()}return n}},{key:"id",get:function(){return this._id}},{key:"name",get:function(){return this._name},set:function(e){this._name=e}},{key:"getPosition",value:function(){return this._params.getValue("position")}},{key:"getValue",value:function(e){try{return this._params.getValue(e)}catch(t){throw new Error("Unable to get value for key: "+e)}}},{key:"addFeatureID",value:function(e){this._featureIDs.push(e)}},{key:"updateBounds",value:function(){var e,t=null,n=null,r=null,o=gf(this._featureIDs);try{for(o.s();!(e=o.n()).done;){var i=e.value;n=hf.getFeatureFromID(i),r=lf(n,null),t=null===t?r.bounds:t.unite(r.bounds)}}catch(a){o.e(a)}finally{o.f()}this._bounds=t}},{key:"params",get:function(){return this._params}},{key:"getBoundingRectangle",value:function(){0!=this._featureIDs.length&&null!==this._featureIDs&&void 0!=this._featureIDs||console.error("No features associated with the component");var e,t=null,n=gf(this._featureIDs);try{for(n.s();!(e=n.n()).done;){var r=e.value,o=hf.getRenderedFeature(r);t=t&&o?t.unite(o.bounds):o.bounds}}catch(i){n.e(i)}finally{n.f()}if(null!==t)return t;throw new Error("Component "+this._name+" "+this._id+" cannot have bounds of null")}},{key:"updateComponentPosition",value:function(e){console.log("input position: ",e),this._params.updateParameter("position",[e[0]+this._renderOffset[0],e[1]+this._renderOffset[1]]);var t,n=gf(this._featureIDs);try{for(n.s();!(t=n.n()).done;){var r=t.value,o=hf.getFeatureFromID(r);o.updateParameter("position",e)}}catch(i){n.e(i)}finally{n.f()}this.updateComponentPorts()}},{key:"setInitialOffset",value:function(){var e=this.getBoundingRectangle();this._renderOffset=[e.x,e.y]}},{key:"setOffset",value:function(){var e=this.getBoundingRectangle(),t=hf.getFeatureFromID(this._featureIDs[0]).getValue("position");this._renderOffset=[e.x-t[0],e.y-t[1]]}},{key:"setPosition",value:function(){this._params.updateParameter("position",this.getTopLeftPosition())}},{key:"replicate",value:function(t,n){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:hf.generateDeviceName(this._entity),o=Tc.getDefinitionForMINT(this._entity);if(null===o)throw new Error("Unable to find definition for component type: "+this._entity);var i=this._params.parameters,a=vf.toMap(o.unique),l=vf.toMap(o.heritable),s=new zc(i,a,l),u=new e(s,r,this._entity);console.log("Checking what the new component params are:",u._params);var c,h=gf(this._featureIDs);try{for(h.s();!(c=h.n()).done;){var f=c.value,d=hf.getFeatureFromID(f),p=d.replicate(this.getPosition()[0],this.getPosition()[1]);p.referenceID=u.id,u.featureIDs.push(p.ID);var v=hf.getDeviceLayerFromID(f);v.addFeature(p)}}catch(g){h.e(g)}finally{h.f()}return console.warn("TODO: Generate renders for the new Features for this new component"),u.updateComponentPosition([t,n]),u}},{key:"getCenterPosition",value:function(){var e=this.getBoundingRectangle();return[e.center.x,e.center.y]}},{key:"getTopLeftPosition",value:function(){var e=this.getBoundingRectangle();return[e.topLeft.x,e.topLeft.y]}},{key:"setPort",value:function(e,t){this._ports.set(e,t)}},{key:"getRotation",value:function(){if(this._params.hasParam("rotation"))return this.getValue("rotation");if(this._params.hasParam("orientation")){var e=this.getValue("orientation");return"V"===e?0:270}return console.warn("Returning rotation = 0 since no rotation was found for component: ",this),0}},{key:"attachComponentPortRender",value:function(e,t){this._componentPortTRenders.set(e,t)}},{key:"updateComponentPorts",value:function(){var e=this.params.toMap(),t=e.get("position");e.set("position",[t[0]-this._renderOffset[0],t[1]-this._renderOffset[1]]);var n,r=Tc.getComponentPorts(e,this._entity),o=gf(r);try{for(o.s();!(n=o.n()).done;){var i=n.value;this.setPort(i.label,i)}}catch(a){o.e(a)}finally{o.f()}}}],[{key:"fromInterchangeV1",value:function(t){var n,r,o,i=!1,a=t.name,l=t.id,s=t.entity,u=(t["x-span"],t["y-span"],t.params);if(n=i?md.defaultParameterDefinitions():Tc.getDefinitionForMINT(s),null===n)throw Error("Could not find definition for type: "+s);for(var c in t.params)Object.prototype.hasOwnProperty.call(n.heritable,c)?r=n.heritable[c]:Object.prototype.hasOwnProperty.call(n.unique,c)&&(r=n.unique[c]),o=t.params[c],"Float"===r&&"string"===typeof o&&(o=parseFloat(o)),u[c]=o;Object.prototype.hasOwnProperty.call(u,"position")||(u.position=[0,0]);var h,f=vf.toMap(n.unique),d=vf.toMap(n.heritable),p=new zc(u,f,d),v=new e(p,a,s,l),g=new Map,y=gf(t.ports);try{for(y.s();!(h=y.n()).done;){var m=h.value,w=b.fromInterchangeV1(m);g.set(w.label,w)}}catch(_){y.e(_)}finally{y.f()}return v.ports=g,v}}]),e}();function Cf(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function Of(e,t){for(var n=0;n=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,a=!0,l=!1;return{s:function(){n=n.call(e)},n:function(){var e=n.next();return a=e.done,e},e:function(e){l=!0,i=e},f:function(){try{a||null==n.return||n.return()}finally{if(l)throw i}}}}function Mf(e,t){if(e){if("string"===typeof e)return jf(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?jf(e,t):void 0}}function jf(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n5&&void 0!==arguments[5]?arguments[5]:Tc.generateID();Af(this,e),this.features=[],this._params=n,this._name=r,this._id=a,this._type=t,this._entity=o,this._featureIDs=[],this._nodes=[],this._bounds=null,this._source=null,this._sinks=[],this._paths=[],this._objects=[],this._routed=!1,this._layer=i}return Bf(e,[{key:"layer",get:function(){return this._layer},set:function(e){this._layer=e}},{key:"sinks",get:function(){return this._sinks}},{key:"source",get:function(){return this._source}},{key:"routed",get:function(){return this._routed},set:function(e){this._routed=e}},{key:"featureIDs",get:function(){return this._featureIDs}},{key:"params",get:function(){return this._params},set:function(e){for(var t in this._params=e,e){var n,r=e.getValue(t),o=If(this._featureIDs);try{for(o.s();!(n=o.n()).done;){var i=n.value,a=Tf.getFeatureFromID(i);a.updateParameter(t,r.getValue())}}catch(l){o.e(l)}finally{o.f()}}}},{key:"setBounds",value:function(e){this._bounds=e;var t=e.topLeft;this._params.updateParameter("position",[t.x,t.y]),this._params.updateParameter("xspan",e.width),this._params.updateParameter("yspan",e.height)}},{key:"updateParameter",value:function(e,t){if(this._params.updateParameter(e,t),console.log("Key: ",e," Val: ",t),"segments"!=e){var n,r=If(this._featureIDs);try{for(r.s();!(n=r.n()).done;){var o=n.value,i=Tf.getFeatureFromID(o);i.updateParameter(e,t)}}catch(a){r.e(a)}finally{r.f()}}}},{key:"toInterchangeV1",value:function(){if(null===this._source)throw new Error("Source is null, cannot convert connection to interchange format:"+this._id);for(var e=[],t=0;tt?this._sinks[t].toJSON():null,wayPoints:n,features:this.features.map((function(e){return e.id}))};e.push(r)}var o={id:this._id,name:this._name,entity:this._entity,source:this._source.toJSON(),sinks:[],paths:e,params:this._params.toJSON(),layer:this._layer.id};if(null!==this._source&&(o.source=this._source.toJSON()),null!==this._sinks&&this._sinks.length>0){var i,a=[],l=If(this._sinks);try{for(l.s();!(i=l.n()).done;){var s=i.value;a.push(s.toJSON())}}catch(u){l.e(u)}finally{l.f()}o.sinks=this._sinks.map((function(e){return Nf.toConnectionTargetInterchangeV1(e)}))}return o}},{key:"id",get:function(){return this._id}},{key:"name",get:function(){return this._name},set:function(e){this._name=e}},{key:"type",get:function(){return this._type}},{key:"getValue",value:function(e){try{return this._params.getValue(e)}catch(t){throw new Error("Unable to get value for key: "+e)}}},{key:"addFeatureID",value:function(e){this._featureIDs.push(e)}},{key:"updateBounds",value:function(){console.log("test");var e,t=null,n=null,r=null,o=If(this._featureIDs);try{for(o.s();!(e=o.n()).done;){var i=e.value;n=Tf.getFeatureFromID(i),console.log(n),r=lf(n,null),console.log("rendered:"),console.log(r),t=null===t?r.bounds:t.unite(r.bounds)}}catch(a){o.e(a)}finally{o.f()}this._bounds=t}},{key:"getPaths",value:function(){return this._paths}},{key:"updateSegments",value:function(e){this.updateParameter("segments",new jc("SegmentArray",e));var t,n=If(this._featureIDs);try{for(n.s();!(t=n.n()).done;){var r=t.value,o=Tf.getFeatureFromID(r);o.updateParameter("segments",e)}}catch(i){n.e(i)}finally{n.f()}}},{key:"insertFeatureGap",value:function(e){var t=!1;console.log(e,e.width,e.height),e=new v.a.Path.Rectangle(e);var n=this.getValue("segments");for(var r in n){var o=n[r],i=new v.a.Path.Line(new v.a.Point(o[0]),new v.a.Point(o[1])),a=i.getIntersections(e);if(2===a.length){var l=a[0].point,s=a[1].point,u=this.breakSegment(o,l,s);if(console.log("breaking:",o,u),2!==u.length)throw new Error("Could not break the segments correctly");n.splice(r,1,u[0],u[1]),t=!0}else 1===a.length?(console.error("Only found 1 intersection point so going to use a different method"),console.log("Found Intersection:",a),console.log("Segments:",n),console.log("line:",i),console.log("Bounding Box:",e)):(console.error("No intersections found so going to use a different method"),console.log("Found Intersection:",a),console.log("Segments:",n),console.log("line:",i),console.log("Bounding Box:",e))}if(!t)throw console.error("There's something funky going on with the intersection,no intersections found"),console.log("Segments:",n),console.log("Bounding Box:",e),new Error("Could not find 2 intersection points, hence aborting the whole thing");return this.updateSegments(n),t}},{key:"breakSegment",value:function(e,t,n){var r,o,i=new v.a.Point(e[0]),a=new v.a.Point(e[1]),l=i.getDistance(t),s=a.getDistance(t),u=i.getDistance(n),c=a.getDistance(n);return l+c=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,a=!0,l=!1;return{s:function(){n=n.call(e)},n:function(){var e=n.next();return a=e.done,e},e:function(e){l=!0,i=e},f:function(){try{a||null==n.return||n.return()}finally{if(l)throw i}}}}function td(e,t){if(e){if("string"===typeof e)return nd(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?nd(e,t):void 0}}function nd(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n1&&void 0!==arguments[1]?arguments[1]:"New Device";rd(this,e),this.__layers=[],this.__textLayers=[],this.__groups=[],this.__params=new zc(t,e.getUniqueParameters(),e.getHeritableParameters()),this.__name=n,this.__components=[],this.__nameMap=new Map,this.__connections=[],this.__valveMap=new Map,this.__valveTypeMap=new Map,this.__parchmintFeatures=[]}return id(e,[{key:"addValve",value:function(e,t,n){this.__valveMap.set(e,t),this.__valveTypeMap.set(e,n)}},{key:"name",get:function(){return this.__name},set:function(e){this.__name=e}},{key:"nameMap",set:function(e){this.__nameMap=e}},{key:"layers",get:function(){return this.__layers}},{key:"parchmintFeatures",get:function(){return this.__parchmintFeatures}},{key:"addConnection",value:function(e){this.__connections.push(e)}},{key:"removeConnection",value:function(e){var t=this.__connections.indexOf(e);-1!=t&&this.__connections.splice(t,1)}},{key:"addComponent",value:function(e){if(!(e instanceof Pf))throw new Error("Tried to add a component that isn't a component to the device");this.__components.push(e)}},{key:"removeComponent",value:function(e){var t,n,r=e.id,o=null,i=ed(this.__connections);try{for(i.s();!(n=i.n()).done;){var a=n.value;try{t=a.tryDeleteConnectionTarget(r),t&&console.log("Removed Component from Connection : ",a.id)}catch(u){console.error(u)}}}catch(c){i.e(c)}finally{i.f()}var l=this.__valveMap.get(r);void 0!=l&&(o=this.getConnectionByID(l),this.__valveMap.delete(r));var s=this.__components.indexOf(e);return-1!=s&&this.__components.splice(s,1),o}},{key:"components",get:function(){return this.__components}},{key:"updateParameter",value:function(e,t){this.__params.updateParameter(e,t)}},{key:"getLayer",value:function(e){for(var t in this.__layers){var n=this.__layers[t];if(n.id==e)return n}return null}},{key:"getLayerFromFeatureID",value:function(e){for(var t=0;t2&&void 0!==arguments[2]?arguments[2]:i.NORMALLY_OPEN;this.__valveMap.set(e.id,t.id),this.__valveTypeMap.set(e.id,n)}},{key:"connections",get:function(){return this.__connections}},{key:"getValvesForConnection",value:function(e){var t,n=e.id,r=[],o=ed(this.__valveMap);try{for(o.s();!(t=o.n()).done;){var i=Jf(t.value,2),a=i[0],l=i[1];if(n===l){var s=this.getComponentByID(a);null!==s&&r.push(s)}}}catch(u){o.e(u)}finally{o.f()}return r}},{key:"getValveType",value:function(e){var t=e.id,n=this.__valveTypeMap.get(t);if(void 0===n)throw new Error("Valve not found");return n}},{key:"getComponentByID",value:function(e){for(var t in this.__components){var n=this.__components[t];if(n.id===e)return n}return null}},{key:"getConnectionByID",value:function(e){for(var t in this.__connections){var n=this.__connections[t];if(n.id===e)return n}return null}},{key:"getComponentByName",value:function(e){var t,n=this.__components,r=ed(n);try{for(r.s();!(t=r.n()).done;){var o=t.value;if(e==o.name)return o}}catch(i){r.e(i)}finally{r.f()}throw new Error("Component with name "+e+"does not exist")}},{key:"getUnroutedConnections",value:function(){var e,t=[],n=this.__connections,r=ed(n);try{for(r.s();!(e=r.n()).done;){var o=e.value;o.routed||t.push(o)}}catch(i){r.e(i)}finally{r.f()}return t}},{key:"getPositionOfComponentPort",value:function(e){var t,n=this.__components,r=ed(n);try{for(r.s();!(t=r.n()).done;){var o,i=t.value,a=ed(i.ports.keys());try{for(a.s();!(o=a.n()).done;){var l=o.value,s=i.ports.get(l);if(void 0!=s&&e.id==s.id)return b.calculateAbsolutePosition(e,i)}}catch(u){a.e(u)}finally{a.f()}}}catch(u){r.e(u)}finally{r.f()}}},{key:"textLayers",get:function(){return this.__textLayers}}],[{key:"getUniqueParameters",value:function(){var e=new Map;return e.set("x-span","Float"),e.set("y-span","Float"),e}},{key:"getHeritableParameters",value:function(){return new Map}},{key:"fromInterchangeV1",value:function(t){var n;if(Object.prototype.hasOwnProperty.call(t,"params")?n=Object.prototype.hasOwnProperty.call(t.params,"width")&&Object.prototype.hasOwnProperty.call(t.params,"length")?new e({width:t.params.width,length:t.params.length},t.name):new e({width:135e3,length:85e3},t.name):(console.warn("Could not find device params, using some default values for device size"),n=new e({width:135e3,length:85e3},t.name)),n.__loadComponentsFromInterchangeV1(t.components),n.__loadConnectionsFromInterchangeV1(t.connections),Object.prototype.hasOwnProperty.call(t,"layers"))n.__loadLayersFromInterchangeV1(t.layers);else{var r=new Yc({},"flow",o.FLOW,"0",n);n.addLayer(r),r=new Yc({},"control",o.CONTROL,"0",n),n.addLayer(r)}var i,a=n.getAllFeaturesFromDevice();for(var l in a)i=a[l],null!==i.referenceID&&n.updateObjectReference(i.referenceID,i.ID);return n}},{key:"fromInterchangeV1_1",value:function(t){var n,r,a;if(Kf(t),Object.prototype.hasOwnProperty.call(t,"params")?n=Object.prototype.hasOwnProperty.call(t.params,"xspan")&&Object.prototype.hasOwnProperty.call(t.params,"yspan")?new e({width:t.params.xspan,length:t.params.yspan},t.name):new e({width:135e3,length:85e3},t.name):(console.warn("Could not find device params, using some default values for device size"),n=new e({width:135e3,length:85e3},t.name)),n.__loadComponentsFromInterchangeV1(t.components),n.__loadConnectionsFromInterchangeV1(t.connections),Object.prototype.hasOwnProperty.call(t.params,"valveMap")&&Object.prototype.hasOwnProperty.call(t.params,"valveTypeMap")){r=zf(t.params.valveMap),console.log("Imported valvemap",r),console.log("Loaded valvetypemap",t.params.valveTypeMap),a=zf(t.params.valveTypeMap),console.log(t.params.valveTypeMap,a);var l,s=ed(r);try{for(s.s();!(l=s.n()).done;){var u=Jf(l.value,2),c=u[0],h=u[1],f=n.getComponentByID(c);if(null===f)throw console.error("Could not find valve with id:",c),new Error("Could not find valve with id: "+c);var d=n.getConnectionByID(h);if(null===d)throw console.error("Could not find connection with id:",h),new Error("Could not find connection with id: "+h);var p=a.get(c);i.NORMALLY_OPEN;if("NORMALLY_OPEN"===p)i.NORMALLY_OPEN;else{if("NORMALLY_CLOSED"!==p)throw console.warn("Could not find valve type for valve with id:",c),new Error("Could not find valve type for valve with id: "+c);i.NORMALLY_CLOSED}n.insertValve(f,d,a.get(c))}}catch(w){s.e(w)}finally{s.f()}}if(Object.prototype.hasOwnProperty.call(t,"features"))n.__loadLayersFromInterchangeV1(t.layers);else{var v=new Yc({},"flow",o.FLOW,"0",n);n.addLayer(v),v=new Yc({},"control",o.CONTROL,"0",n),n.addLayer(v)}var g,y=n.getAllFeaturesFromDevice();for(var m in y)g=y[m],null!==g.referenceID&&n.updateObjectReference(g.referenceID,g.ID);return n}},{key:"makeFeature",value:function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"New Feature",r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:void 0,o=arguments.length>4?arguments[4]:void 0,i=arguments.length>5?arguments[5]:void 0,a=new zc(new Map,new Map,new Map);if("EDGE"===e)return new Qd(o,a,r);var l=Tc.getDefinition(e);if(t&&l)Bd.checkDefaults(t,l.heritable,Tc.getDefaultsForType(e)),a=new zc(t,vf.toMap(l.unique),vf.toMap(l.heritable));else{var s=new Map;a=new zc(t,s.set("position","Point"),new Map)}var u=new Bd(e,a,n,r);if(i)for(var c=0;c2&&void 0!==arguments[2]?arguments[2]:e.toUpperCase();return sd(this,n),o=t.call(this),o.dxfData=null,o._type="",o._entity="",o._renderData=null,o._params=new zc({},new Map,new Map),o._type=e,o._entity=i,o.dxfData=r,o}return cd(n,[{key:"entity",get:function(){return this._entity}},{key:"type",get:function(){return this._type}},{key:"renderData",set:function(e){this._renderData=e}},{key:"generateComponent",value:function(){var e={},t=ad.makeFeature(this.type,e,qf.generateNewName(this.type),Tc.generateID(),"XY",this.dxfData);return t}},{key:"toJSON",value:function(){var e=[];for(var t in this.dxfData)e.push(this.dxfData[t].getData());var n={type:this.type,entity:this.entity,params:this._params.toJSON(),dxfData:e};return n}}],[{key:"fromInterchangeV1",value:function(e){var t=[];for(var r in e.dxfData)t.push(new xc(e.dxfData[r]));var o=new n(e.type,t,e.entity);return o}},{key:"defaultParameterDefinitions",value:function(){var e={unique:{position:"Point"},heritable:{rotation:"Float",height:"Float"},units:{rotation:"°",height:"μm"},defaults:{rotation:0,height:100},minimum:{rotation:0,height:1},maximum:{rotation:359,height:1200},mint:""};return e}}]),n}(O),wd=n("ba10"),bd=n.n(wd);function _d(e){return _d="function"===typeof Symbol&&"symbol"===typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"===typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},_d(e)}function Pd(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function Cd(e,t){for(var n=0;n3&&void 0!==arguments[3]?arguments[3]:Tc.generateID(),i=arguments.length>4&&void 0!==arguments[4]?arguments[4]:Dc.XY;jd(this,e),this._type=t,this._params=n,this._name=r,this._id=o,this._type=t,this._fabtype=i,this._dxfObjects=[],this._referenceID=null,this.layer=null;var a,l=this.deriveRenderName();a="Port"==this.type?"PORT":"COMPONENT",console.log("rendName: ",l),console.log("z-offset-key: ",Tc.library[this.type].object.zOffsetKey(l)),this._manufacturingInfo={fabtype:i,layertype:null,rendername:l,z_offset_key:Tc.library[this.type].object.zOffsetKey(l),depth:this.getValue(Tc.library[this.type].object.zOffsetKey(l)),substrate_offset:Tc.library[this.type].object.substrateOffset(l),substrate:null,modifier:a}}return Vd(e,[{key:"id",get:function(){return this._id}},{key:"type",get:function(){return this._type}},{key:"referenceID",get:function(){return this._referenceID},set:function(e){this._referenceID=e}},{key:"dxfObjects",get:function(){return this._dxfObjects},set:function(e){this._dxfObjects=e}},{key:"fabType",get:function(){return this._fabtype}},{key:"manufacturingInfo",get:function(){return this.setManufacturingInfoLayer(),this._manufacturingInfo}},{key:"setManufacturingInfoLayer",value:function(){if(this._manufacturingInfo.depth=this.getValue(Tc.library[this.type].object.zOffsetKey(this.deriveRenderName())),null===this.layer)throw new Error("Layer not set in feature "+this.ID+" so manufacturingInfo cannot be set");this._manufacturingInfo.layertype=this.layer.type,this._manufacturingInfo.substrate=Md.setSubstrate(this,this._manufacturingInfo.substrate_offset)}},{key:"updateParameter",value:function(e,t){this._params.updateParameter(e,t),Wd.get().emit(Wd.UPDATE_RENDERS,this)}},{key:"toJSON",value:function(){var e={id:this._id,name:this._name,type:this._type,params:this._params.toJSON()};return e}},{key:"toInterchangeV1",value:function(){var e,t,n={id:this._id,name:this._name,macro:this._type,params:this._params.toJSON(),type:this._fabtype,referenceID:this._referenceID,dxfData:this._dxfObjects.map((function(e){return e.toJSON()})),layerID:null!==(e=null===(t=this.layer)||void 0===t?void 0:t.id)&&void 0!==e?e:""};return n}},{key:"ID",get:function(){return this._id}},{key:"setName",value:function(e){this._name=e}},{key:"getName",value:function(){return this._name}},{key:"getType",value:function(){return this._type}},{key:"getValue",value:function(e){try{return this._params.getValue(e)}catch(t){if(this.hasDefaultParam(e))return this.getDefaults()[e];throw new Error("Unable to get value for key: "+e)}}},{key:"hasDefaultParam",value:function(e){return!!this.getDefaults().hasOwnProperty(e)}},{key:"hasUniqueParam",value:function(e){return this._params.isUnique(e)}},{key:"hasHeritableParam",value:function(e){return this._params.isHeritable(e)}},{key:"getHeritableParams",value:function(){return Tc.getHeritableForType(this.getType())}},{key:"getUniqueParams",value:function(){return Tc.getUniqueForType(this.getType())}},{key:"getDefaults",value:function(){return Tc.getDefaultsForType(this.getType())}},{key:"getParams",value:function(){return this._params.parameters}},{key:"setParams",value:function(e){this._params.loadParameters(e)}},{key:"replicate",value:function(e,t){this._params;var n={position:[e,t]};for(var r in this._params.parameters)n[r]=this.getValue(r);var o=ad.makeFeature(this._type,n,this._name,Tc.generateID(),"XY",this._dxfObjects.map((function(e){return e.toJSON()})));return o}},{key:"deriveRenderName",value:function(){return Tc.library[this.type]||(console.error("Type unrecognized, defaulting to template."),this._type="Template"),Tc.library[this.type].key}},{key:"getDXFObjects",value:function(){return this._dxfObjects}},{key:"addDXFObject",value:function(e){this._dxfObjects.push(e)}}],[{key:"checkDefaults",value:function(e,t,n){for(var r in t)Object.prototype.hasOwnProperty.call(e,r)||(e[r]=n[r]);return e}},{key:"fromJSON",value:function(e){return ad.makeFeature(e.type,e.params,e.name,e.id,"XY",[])}},{key:"fromInterchangeV1",value:function(e){var t;return t=ad.makeFeature(e.macro,e.params,e.name,e.id,e.type,e.dxfData),Object.prototype.hasOwnProperty.call(e,"referenceID")&&(t.referenceID=e.referenceID),t}},{key:"makeCustomComponentFeature",value:function(t,n,r){var o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"New Feature",i=arguments.length>4&&void 0!==arguments[4]?arguments[4]:void 0,a=md.defaultParameterDefinitions();e.checkDefaults(r,a.heritable,Tc.getDefaultsForType(t.type));var l=new zc(r,vf.toMap(a.unique),vf.toMap(a.heritable)),s=new e(t.type,l,o,i,Dc.XY);return s.dxfObjects=t.dxfData,s}}]),e}();function Gd(e){return Gd="function"===typeof Symbol&&"symbol"===typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"===typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Gd(e)}function zd(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function Ud(e,t){for(var n=0;n2&&void 0!==arguments[2]?arguments[2]:Tc.generateID();return zd(this,n),o=t.call(this,"EDGE",r,i,i,Dc.EDGE),o._edgeObjects=e||[],o}return Kd(n,[{key:"generateRectEdge",value:function(e,t){e/=1e3,t/=1e3;var n=new xc({type:"POLYLINE",vertices:[{x:0,y:0,z:0},{x:e,y:0,z:0},{x:e,y:t,z:0},{x:0,y:t,z:0},{x:0,y:0,z:0}]});this.addDXFObject(n)}}]),n}(Bd);function ep(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function tp(e,t){for(var n=0;n=a.x;f-=n){var d=new v.a.Point(f,i.y+l/2);e.isThick(f,t.origin.x,n,t.thickCount)?s.addChild(o.place(d)):s.addChild(r.place(d))}return s}},{key:"makeHorizontalLines",value:function(t){for(var n=t.getSpacing(),r=e.horizLineSymbol(t.getThinWidth(),t.color),o=e.horizLineSymbol(t.getThickWidth(),t.color),i=v.a.view.bounds.topLeft,a=v.a.view.bounds.bottomLeft,l=v.a.view.bounds.width,s=new v.a.Group,u=Math.floor((i.y-t.origin.y)/n)*n+t.origin.y,c=u;c=a.y;f-=n){var d=new v.a.Point(i.x+l/2,f);e.isThick(f,t.origin.y,n,t.thickCount)?s.addChild(o.place(d)):s.addChild(r.place(d))}return s}}]),e}();function op(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function ip(e,t){for(var n=0;n1&&void 0!==arguments[1]?arguments[1]:lp,n=new v.a.Path.Rectangle({from:v.a.view.bounds.topLeft.subtract(new v.a.Point(v.a.view.size)),to:v.a.view.bounds.bottomRight.add(new v.a.Point(v.a.view.size)),fillColor:new v.a.Color(Oh),strokeColor:null}),r=sp/v.a.view.zoom,o=e.getXSpan(),i=e.getYSpan(),a=new v.a.Path.Rectangle({from:new v.a.Point(0,0),to:new v.a.Point(o,i),fillColor:Dh,strokeColor:t,strokeWidth:r}),l=new v.a.Group([n,a]);return l}}]),e}();function cp(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function hp(e,t){for(var n=0;n1&&void 0!==arguments[1]?arguments[1]:1.177827941003;return e<0?this.view.getZoom()*t:e>0?this.view.getZoom()/t:this.view.getZoom()}},{key:"moveCenter",value:function(e){this.view.setCenter(this.calcCenter(e))}},{key:"calcCenter",value:function(e){return this.view.getCenter().subtract(e)}}]),e}();function pp(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function vp(e,t){for(var n=0;n1&&void 0!==arguments[1]&&arguments[1];pp(this,e),this.__features=[],this.__name=t,this.__paperGroup=new v.a.Group,this.__flip=n}return gp(e,[{key:"name",get:function(){return this.__name}},{key:"flip",get:function(){return this.__flip}},{key:"addFeature",value:function(e){if(null===e||void 0===e)return!1;var t=e.clone();return console.log("Copied feature",t),this.__features.push(t),this.__paperGroup.addChild(t),!0}},{key:"generateFeatureRender",value:function(e,t){console.log("Generating Render for invisible feature",e);var n=lf(e,t);return this.__features.push(n),this.__paperGroup.addChild(n),!0}},{key:"flipX",value:function(){var e=zh.currentDevice;if(null!==e){var t=e.getYSpan(),n=e.getXSpan();console.log("Flipping stuff:",n,t);var r=new v.a.Point(n/2,t/2);this.__paperGroup.scale(-1,1,r)}}},{key:"exportToSVG",value:function(){var t=zh.currentDevice;if(null!==t){var n=t.getYSpan(),r=t.getXSpan(),o=this.__paperGroup.exportSVG({asString:!0});return o=e.generateSVGTextPrepend(r,n)+o+e.generateSVGTextAppend(),o}throw new Error("Registry.currentDevice is null")}},{key:"flushData",value:function(){this.__paperGroup.removeChildren()}}],[{key:"generateSVGTextPrepend",value:function(e,t){var n='');return n}},{key:"generateSVGTextAppend",value:function(){return""}}]),e}();function mp(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function wp(e,t){for(var n=0;n=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,a=!0,l=!1;return{s:function(){n=n.call(e)},n:function(){var e=n.next();return a=e.done,e},e:function(e){l=!0,i=e},f:function(){try{a||null==n.return||n.return()}finally{if(l)throw i}}}}function Cp(e,t){if(e){if("string"===typeof e)return Op(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?Op(e,t):void 0}}function Op(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n3&&void 0!==arguments[3]?arguments[3]:500,o=t[0],i=t[1],a=new v.a.Point(o+e.x,i+e.y),l=new v.a.Path.Circle(a,r);return l.rotate(n,new v.a.Point(t[0],t[1])),l.fillColor=new v.a.Color(kh),l}},{key:"getSizeforZoomLevel",value:function(){var e=v.a.view.zoom,t=5/e;return t>500&&(t=500),t}},{key:"renderComponentPorts",value:function(t){var n=e.getSizeforZoomLevel(),r=t.ports,o=[],i=t.getRotation(),a=t.getValue("position");t.setOffset();var l,s=[a[0]-t.offset[0],a[1]-t.offset[1]],u=Pp(r.keys());try{for(u.s();!(l=u.n()).done;){var c=l.value,h=r.get(c);if(void 0!==h){var f=e.renderComponentPort(h,s,i,n);t.attachComponentPortRender(c,f),o.push(f)}else console.error("component ".concat(t.id," has no port ").concat(c))}}catch(d){u.e(d)}finally{u.f()}return o}}]),e}();function Dp(e,t){var n="undefined"!==typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!n){if(Array.isArray(e)||(n=Tp(e))||t&&e&&"number"===typeof e.length){n&&(e=n);var r=0,o=function(){};return{s:o,n:function(){return r>=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,a=!0,l=!1;return{s:function(){n=n.call(e)},n:function(){var e=n.next();return a=e.done,e},e:function(e){l=!0,i=e},f:function(){try{a||null==n.return||n.return()}finally{if(l)throw i}}}}function Tp(e,t){if(e){if("string"===typeof e)return Fp(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?Fp(e,t):void 0}}function Fp(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n0&&void 0!==arguments[0]?arguments[0]:Tc.generateID();Ip(this,e),this.__position=[0,0],this.__height=0,this.__type="BlankUIElement",this.__featureIDs=[],this.__id=t}return jp(e,[{key:"type",get:function(){return this.__type}},{key:"featureIDs",get:function(){return this.__featureIDs}},{key:"position",get:function(){return this.__position}},{key:"id",get:function(){return this.__id}},{key:"hasFeatureID",value:function(e){return!!this.__featureIDs.includes(e)}},{key:"draw",value:function(){console.log("Drawing at ".concat(this.__position[0],", ").concat(this.__position[1]))}}]),e}();function Vp(e){return Vp="function"===typeof Symbol&&"symbol"===typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"===typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Vp(e)}function Bp(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function Gp(e,t){if("function"!==typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&zp(e,t)}function zp(e,t){return zp=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e},zp(e,t)}function Up(e){var t=Yp();return function(){var n,r=Xp(e);if(t){var o=Xp(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return Kp(this,n)}}function Kp(e,t){if(t&&("object"===Vp(t)||"function"===typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return Hp(e)}function Hp(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function Yp(){if("undefined"===typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"===typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}function Xp(e){return Xp=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)},Xp(e)}var qp=function(e){Gp(n,e);var t=Up(n);function n(e,r,o){var i,a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:Tc.generateID();return Bp(this,n),i=t.call(this,a),i.__position=r.position.value,i.__height=r.height.value,i.__type=e,i.__featureIDs=o,i}return n}(Ap);function Jp(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function $p(e,t){for(var n=0;n0){for(var t=0;t=0&&this.showActiveLayer()}},{key:"showActiveLayer",value:function(){this.featureLayer.remove(),this.featureLayer=new v.a.Group;for(var e=0;e4&&void 0!==arguments[4]?arguments[4]:this.activeLayer,i=ad.makeFeature("Text",{position:t,height:20,text:e,fontSize:n,color:r},"TEXT_"+e,d.a.v1(),"XY",null);this.__viewManagerDelegate.addFeature(i,o,!1);var a=this.addUIElement("Text",i.getParams(),[i.ID]);i.referenceID=a.id,this.__viewManagerDelegate.saveDeviceState()}},{key:"addUIElement",value:function(e,t,n){if(void 0===zh.viewManager||null===zh.viewManager)throw console.log("ViewManager is not defined"),new Error("ViewManager is not defined");var r;return r="Text"==e?new qp(e,t,n):new Ap,zh.viewManager.nonphysElements.push(r),r}},{key:"insertUIFeature",value:function(e){this.uiLayer.insertChild(0,e)}},{key:"addComponent",value:function(e,t,n,r){if(void 0===zh.viewManager||null===zh.viewManager)throw console.error("ViewManager is not defined"),new Error("ViewManager is not defined");if(void 0===zh.currentDevice||null===zh.currentDevice)throw console.error("Current Device is not defined"),new Error("Current Device is not defined");var o=Tc.getDefinition(e);if(void 0===o||null===o)throw new Error("Component definition not found");var i={};for(var a in t)i[a]=t[a].value;var l,s=new zc(i,vf.toMap(o.unique),vf.toMap(o.heritable)),u=Tc.generateID(),c=zh.currentDevice.generateNewName(e),h=new Pf(s,c,o.mint,u);for(var f in n)h.addFeatureID(n[f]),l=this.__viewManagerDelegate.getFeatureByID(n[f]),l.referenceID=u;return zh.currentDevice.addComponent(h),h}},{key:"comparePaperFeatureHeights",value:function(e,t){var n,r,o=this.__viewManagerDelegate.getFeatureByID(e.featureID),i=this.__viewManagerDelegate.getFeatureByID(t.featureID);try{r=o.getValue("height")}catch(a){r=9999}try{n=i.getValue("height")}catch(a){n=9999}return r-n}},{key:"insertChildByHeight",value:function(e,t){var n;n=e.children.length>0?this.getIndexByHeight(e.children,t):0,e.insertChild(n,t)}},{key:"getIndexByHeight",value:function(e,t){for(var n=0;n=0)return n}return e.length}},{key:"updateFeature",value:function(e){var t,n,r=this.paperFeatures[e.ID];if(t=!!r&&r.selected,this.removeFeature(e),e instanceof Qd)return n=Uh(e),n.selected=t,this.paperFeatures[n.featureID]=n,void this.insertEdgeFeatures(n);n=lf(e,null),n.selected=t,this.paperFeatures[n.featureID]=n;var o=this.__viewManagerDelegate.renderLayers.indexOf(this.__viewManagerDelegate.getRenderLayerByID(e.ID)),i=this.paperLayers[o];this.insertChildByHeight(i,n),this.featureRegistry.set(n.featureID,i.id)}},{key:"removeTarget",value:function(){this.currentTarget&&this.currentTarget.remove(),this.currentTarget=null}},{key:"addTarget",value:function(e,t,n,r){this.removeTarget(),this.lastTargetParameters=r,this.lastTargetType=e,this.lastTargetPosition=n,this.lastTargetSet=t,this.updateTarget()}},{key:"updateTarget",value:function(){if(null===this.__viewManagerDelegate.currentLayer)throw console.error("No layer selected"),new Error("No layer selected");if(this.removeTarget(),this.lastTargetType&&this.lastTargetPosition)if("TEXT"===this.lastTargetType)this.currentTarget=rf(this.lastTargetType,this.lastTargetPosition),this.uiLayer.addChild(this.currentTarget);else if("Custom"===this.lastTargetSet){var e=this.__viewManagerDelegate.customComponentManager.getCustomComponent(this.lastTargetType),t=zh.featureDefaults[this.lastTargetSet][this.lastTargetType];t.position=this.lastTargetPosition,t.color=Ah(this.lastTargetType,this.__viewManagerDelegate.currentLayer),this.currentTarget=dh(e,t),this.uiLayer.addChild(this.currentTarget)}else this.currentTarget=nf(this.lastTargetType,this.lastTargetPosition,this.lastTargetParameters),this.uiLayer.addChild(this.currentTarget)}},{key:"removeFeature",value:function(e){var t=this.paperFeatures[e.ID];t&&t.remove(),this.paperFeatures[e.ID]=null,this.featureRegistry.delete(e.ID)}},{key:"removeGrid",value:function(){this.paperGrid&&this.paperGrid.remove(),this.paperGrid=null}},{key:"updateGrid",value:function(e){this.removeGrid();var t=rp.renderGrid(e);this.paperGrid=t,this.gridLayer.addChild(t)}},{key:"updateAlignmentMarks",value:function(){}},{key:"removeAlignmentMarks",value:function(){this.alignmentMarks&&this.alignmentMarks.removeChildren(),this.alignmentMarks=null}},{key:"updateRatsNest",value:function(){this.removeRatsNest();var e=this.__viewManagerDelegate.currentDevice.getUnroutedConnections(),t=_p.renderRatsNest(e,this.__viewManagerDelegate.currentDevice);this.__ratsNestRender=t,this.ratsNestLayer.addChild(this.__ratsNestRender)}},{key:"removeRatsNest",value:function(){this.__ratsNestRender&&this.__ratsNestRender.remove(),this.__ratsNestRender=null}},{key:"moveCenter",value:function(e){this.panAndZoom.moveCenter(e)}},{key:"adjustZoom",value:function(e,t){this.panAndZoom.adjustZoom(e,t)}},{key:"getFeaturesByViewElements",value:function(e){for(var t=[],n=0;ns?1/l:1/s}},{key:"hitFeature",value:function(e){var t,n=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],r=arguments.length>2&&void 0!==arguments[2]&&arguments[2],o={fill:!0,tolerance:5,guides:!1};if(n&&null!==this.activeLayer&&!r){t=this.paperLayers[this.activeLayer];var i=t.hitTest(e,o);if(i)return i.item}else if(n&&r){t=this.getNonphysText();var a=t.hitTest(e,o);if(a)return a.item}else for(var l=this.paperLayers.length-1;l>=0;l--){t=this.paperLayers[l];var s=t.hitTest(e,o);if(s)return s.item}return null}},{key:"hitFeaturesWithViewElement",value:function(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],n=[];if(t&&null!==this.activeLayer)for(var r=this.paperLayers[this.activeLayer],o=0;o1&&void 0!==arguments[1]?arguments[1]:5,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:100,o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:10,i=arguments.length>4&&void 0!==arguments[4]?arguments[4]:[0,0],a=arguments.length>5&&void 0!==arguments[5]?arguments[5]:1,l=arguments.length>6&&void 0!==arguments[6]?arguments[6]:3,s=arguments.length>7&&void 0!==arguments[7]?arguments[7]:Sh;ev(this,e),this.__viewManagerDelegate=t,this.origin=new v.a.Point(i[0],i[1]),this.thinWidth=a,this.thickWidth=l,this.minSpacing=n,this.maxSpacing=r,this.thickCount=o,this.__spacing=500,this.__isAutomaticEnabled=!0,this.color=new v.a.Color(s)}return nv(e,[{key:"spacing",get:function(){return this.__spacing},set:function(t){console.log(e.isValidZoom(t)),this.__spacing=t}},{key:"enableAdaptiveGrid",value:function(){this.__isAutomaticEnabled=!0}},{key:"disableAdaptiveGrid",value:function(){this.__isAutomaticEnabled=!1}},{key:"getClosestGridPoint",value:function(e){var t=Math.round((e.x-this.origin.x)/this.__spacing)*this.__spacing+this.origin.x,n=Math.round((e.y-this.origin.y)/this.__spacing)*this.__spacing+this.origin.y;return new v.a.Point(t,n)}},{key:"setOrigin",value:function(e){this.origin=new v.a.Point(e[0],e[1]),this.notifyViewManagerToUpdateView()}},{key:"setThinWidth",value:function(e){this.thinWidth=e,this.notifyViewManagerToUpdateView()}},{key:"setThickWidth",value:function(e){this.thickWidth=e,this.notifyViewManagerToUpdateView()}},{key:"setMinSpacing",value:function(e){this.__spacing=e,this.notifyViewManagerToUpdateView()}},{key:"setMaxSpacing",value:function(e){this.maxSpacing=e,this.notifyViewManagerToUpdateView()}},{key:"setColor",value:function(e){this.color=new v.a.Color(e),this.notifyViewManagerToUpdateView()}},{key:"getSpacing",value:function(){if(this.__isAutomaticEnabled){var e=v.a.view.zoom;return this.__spacing=e<=.02?1e3:e<=.05?500:e<=.1?100:e<=.6?50:5,this.__spacing}return this.__spacing}},{key:"updateGridSpacing",value:function(t){return e.isValidZoom(t)?(console.log("New spacing value:",t),this.__spacing=t,!0):(console.error("Inavlid Grid Spacing"),!1)}},{key:"getThinWidth",value:function(){return this.thinWidth/v.a.view.zoom}},{key:"getThickWidth",value:function(){return this.thickWidth/v.a.view.zoom}},{key:"notifyViewManagerToUpdateView",value:function(){this.__viewManagerDelegate?this.__viewManagerDelegate.updateGrid():console.error("Could not find view manager to send update grid signal")}}],[{key:"isValidZoom",value:function(e){return!0}}]),e}(),ov=n("21a6");function iv(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function av(e,t){for(var n=0;n2&&void 0!==arguments[2]&&arguments[2];uv(this,e),this.timeout=n,this.func=t,this.waiting=!1,this.queued=!0,this.counter=0,this.report=r}return hv(e,[{key:"run",value:function(){this.waiting?(this.counter++,this.queued||(this.queued=!0)):(this.report&&console.log("Waited "+this.counter+" times."),this.func(),this.startTimer(),this.counter=0)}},{key:"endTimer",value:function(){this.waiting=!1,this.queued&&(this.queued=!1,this.run())}},{key:"startTimer",value:function(){var e=this;this.waiting=!0,window.setTimeout((function(){e.endTimer()}),this.timeout)}}]),e}();function dv(e){return dv="function"===typeof Symbol&&"symbol"===typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"===typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},dv(e)}function pv(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function vv(e,t){for(var n=0;n0){for(var e=0;e2&&void 0!==arguments[2]?arguments[2]:null;Rv(this,n),o=t.call(this,e),o.lastPoint=[0,0],o.viewManagerDelegate=e,o.typeString=r,o.setString="Basic",o.currentFeatureID=null,o.currentParameters=i;var a=Wv(o);return o.lastPoint=[0,0],o.showQueue=new fv((function(){a.showTarget()}),20,!1),o.up=function(e){},o.move=function(e){var t=sv.getEventPosition(e);null!==t&&(a.lastPoint=[t.x,t.y],a.showQueue.run())},o.down=function(e){a.viewManagerDelegate.killParamsWindow(),v.a.project.deselectAll(),a.createNewFeature(sv.getEventPosition(e))},o}return kv(n,[{key:"createNewFeature",value:function(e){var t,r=null===(t=this.viewManagerDelegate.currentDevice)||void 0===t?void 0:t.generateNewName(this.typeString),o=ad.makeFeature(this.typeString,{position:n.getTarget([e.x,e.y])},r);this.currentFeatureID=o.ID,this.viewManagerDelegate.addFeature(o)}},{key:"showTarget",value:function(){if(null!==this.lastPoint){var e=n.getTarget(this.lastPoint);this.viewManagerDelegate.updateTarget(this.typeString,this.setString,e,this.currentParameters)}}},{key:"createNewComponent",value:function(e,t,n){var r=Tc.getDefinition(e),o={};for(var i in t)o[i]=t[i].value;o["position"]=[0,0];var a,l=new zc(o,vf.toMap(r.unique),vf.toMap(r.heritable)),s=Tc.generateID(),u=zh.currentDevice.generateNewName(e),c=new Pf(l,u,r.mint,s);for(var h in n)c.addFeatureID(n[h]),a=zh.currentDevice.getFeatureByID(n[h]),a.referenceID=s;return c.setInitialOffset(),c.updateComponentPosition(t["position"].value),this.viewManagerDelegate.currentDevice.addComponent(c),c}},{key:"deactivate",value:function(){}},{key:"getCreationParameters",value:function(e){if(null===this.currentParameters)throw new Error("No parameters to create a new feature");var t={position:n.getTarget([e.x,e.y])};for(var r in this.currentParameters){var o=this.currentParameters[r],i=o.name,a=o.value;t[i]=a}return t}}],[{key:"getTarget",value:function(e){if(null===zh.viewManager)throw new Error("View Manager is null");var t=zh.viewManager.snapToGrid(e);return t}},{key:"getMinTarget",value:function(e){var t=[Math.round(e[0]),Math.round(e[1])];return t}}]),n}(sv);function Mv(e){return Mv="function"===typeof Symbol&&"symbol"===typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"===typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Mv(e)}function jv(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function Av(e,t){for(var n=0;n0){for(var e=0;e0&&(e.pasteboard[0]=o[0]),e.saveDeviceState(),e.view.deleteSelectedFeatures()}if((t.ctrlKey||t.metaKey)&&86===r){var i=e.pasteboard;i.length>0&&(e.updateDefaultsFromFeature(i[0]),e.activateTool(i[0].getType()))}if(90===t.keyCode&&(t.metaKey||t.ctrlKey)&&(console.log("Undo executed"),e.undo()),37===r&&(n=t.shiftKey?10:t.ctrlKey?.1:1,e.view.moveCenter(new v.a.Point(1e3*n,0)),e.updateGrid(),e.view.updateAlignmentMarks()),38===r&&(n=t.shiftKey?10:t.ctrlKey?.1:1,e.view.moveCenter(new v.a.Point(0,1e3*n)),e.updateGrid(),e.view.updateAlignmentMarks()),39===r&&(n=t.shiftKey?10:t.ctrlKey?.1:1,e.view.moveCenter(new v.a.Point(-1e3*n,0)),e.updateGrid(),e.view.updateAlignmentMarks()),40===r&&(n=t.shiftKey?10:t.ctrlKey?.1:1,e.view.moveCenter(new v.a.Point(0,-1e3*n)),e.updateGrid(),e.view.updateAlignmentMarks()),(t.ctrlKey||t.metaKey)&&65===r)return e.view.selectAllActive(),!1}))}},{key:"updateViewMouseEvents",value:function(){this.viewManagerDelegate.view.setMouseDownFunction(this.constructMouseDownEvent(this.__leftMouseTool,this.__middleMouseTool,this.__leftMouseTool)),this.viewManagerDelegate.view.setMouseUpFunction(this.constructMouseUpEvent(this.__leftMouseTool,this.__middleMouseTool,this.__leftMouseTool)),this.viewManagerDelegate.view.setMouseMoveFunction(this.constructMouseMoveEvent(this.__leftMouseTool,this.__middleMouseTool,this.__leftMouseTool))}},{key:"__mouseDownCallback",value:function(e){console.log("testing down callback",e)}},{key:"__mouseUpCallback",value:function(e){console.log("testing up callback",e)}},{key:"__mouseMoveCallback",value:function(e){console.log("testing move callback",e)}},{key:"constructMouseDownEvent",value:function(e,t,n){return console.log("Tool1: ",e,"Tool2: ",t,"Tool3: ",n),e===n?(console.log("Both right and left tool is the same"),this.constructMouseEvent(e.down,t.down,n.rightdown,this.__mouseDownCallback)):this.constructMouseEvent(e.down,t.down,n.down)}},{key:"constructMouseMoveEvent",value:function(e,t,n){return this.constructMouseEvent(e.move,t.move,n.move,this.__mouseUpCallback)}},{key:"constructMouseUpEvent",value:function(e,t,n){return this.constructMouseEvent(e.up,t.up,n.up,this.__mouseMoveCallback)}},{key:"constructMouseEvent",value:function(t,n,r,o){return console.log("construct mouse event!"),function(i){var a;i.buttons?(o(i),a=e.__eventButtonsToWhich(i.buttons)):a=i.which,2===a?n(i):3===a?r(i):1!==a&&0!==a||t(i)}}}],[{key:"__eventButtonsToWhich",value:function(e){return 1===e?1:2===e?3:4===e||3===e?2:void 0}}]),e}(),Rg=n("6821"),Lg=n.n(Rg);function kg(e){return kg="function"===typeof Symbol&&"symbol"===typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"===typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},kg(e)}function Dg(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function Tg(e,t){for(var n=0;nEg&&this.deviceData.splice(0,1),this.deviceData.push(e),this.__mostRecentMD5=t,console.log("Saved new state:",t))}},{key:"popDesign",value:function(){if(this.deviceData.length>0){var e=this.deviceData.pop();return e}return null}},{key:"__cloneObject",value:function(e){var t={};for(var n in e)null!==e[n]&&"object"===kg(e[n])?t[n]=this.__cloneObject(e[n]):t[n]=e[n];return t}}]),e}();function xg(e){return xg="function"===typeof Symbol&&"symbol"===typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"===typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},xg(e)}function Ng(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function Ig(e,t){for(var n=0;n3&&void 0!==arguments[3]?arguments[3]:null;return Yg(this,n),t.call(this,e,r,i)}return qg(n,[{key:"createNewFeature",value:function(e){var t,r=[],o=this.getCreationParameters(new v.a.Point(0,0)),i=ad.makeFeature(this.typeString,o);this.currentFeatureID=i.ID,this.viewManagerDelegate.addFeature(i),r.push(i.ID);var a=Iv.getTarget([e.x,e.y]),l=i.getParams();l["position"]=new jc("position",a),Jg(oy(n.prototype),"createNewComponent",this).call(this,this.typeString,l,r),null===(t=zh.viewManager)||void 0===t||t.saveDeviceState()}}]),n}(Iv);function ay(e){return ay="function"===typeof Symbol&&"symbol"===typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"===typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},ay(e)}function ly(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function sy(e,t){for(var n=0;n3&&void 0!==arguments[3]?arguments[3]:null;return ly(this,n),t.call(this,e,r,i)}return uy(n,[{key:"createNewFeature",value:function(e){var t,r=[],o=Math.floor(zh.viewManager.renderLayers.indexOf(this.viewManagerDelegate.currentLayer)/3),i=3*o,a=3*o+1,l=3*o+2,s=this.getCreationParameters(new v.a.Point(0,0)),u=ad.makeFeature(this.typeString,s);this.currentFeatureID=u.ID,this.viewManagerDelegate.addFeature(u,i);var c,h=u.getParams();r.push(u.ID),Tc.library[this.typeString+"_control"]&&(c=this.typeString+"_control",u=ad.makeFeature(c,s),this.currentFeatureID=u.ID,this.viewManagerDelegate.addFeature(u,a),r.push(u.ID)),Tc.library[this.typeString+"_integration"]&&(c=this.typeString+"_integration",u=ad.makeFeature(c,s),this.currentFeatureID=u.ID,this.viewManagerDelegate.addFeature(u,l),r.push(u.ID)),h["position"]=new jc("position",[e.x,e.y]),cy(my(n.prototype),"createNewComponent",this).call(this,this.typeString,h,r),null===(t=zh.viewManager)||void 0===t||t.saveDeviceState()}},{key:"showTarget",value:function(){if(null!==this.lastPoint){var e=Iv.getTarget(this.lastPoint);this.viewManagerDelegate.updateTarget(this.typeString,this.setString,e,this.currentParameters)}}}]),n}(Iv);function by(e){return by="function"===typeof Symbol&&"symbol"===typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"===typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},by(e)}function _y(e,t){return Ry(e)||Sy(e,t)||Cy(e,t)||Py()}function Py(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function Cy(e,t){if(e){if("string"===typeof e)return Oy(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?Oy(e,t):void 0}}function Oy(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n3&&void 0!==arguments[3]?arguments[3]:null;Ly(this,n),i=t.call(this,e,r,a);var l=i.viewManagerDelegate.getCurrentLevelRenderLayers(),s=_y(l,3),u=s[0],c=s[1],h=s[2];if(null===u)throw new Error("Flow layer is null");if(i.flowlayer=u,null===c)throw new Error("Control layer is null");if(null===h)throw new Error("Integration layer is null");return i.controllayer=c,i.intlayer=h,i}return Dy(n,[{key:"createNewFeature",value:function(e){var t=[],r=this.getCreationParameters(e),o=ad.makeFeature(this.typeString,r);this.currentFeatureID=o.ID,null!==this.flowlayer&&this.viewManagerDelegate.addFeature(o,this.viewManagerDelegate.renderLayers.indexOf(this.flowlayer)),t.push(o.ID);var i,a=o.getParams(),l=o.getParams();Tc.library[this.typeString+"_control"]&&(o.setParams(l),this.currentFeatureID=o.ID,null!==this.controllayer&&this.viewManagerDelegate.addFeature(o,this.viewManagerDelegate.renderLayers.indexOf(this.controllayer)),t.push(o.ID)),Tc.library[this.typeString+"_integration"]&&(i=this.typeString+"_integration",o=ad.makeFeature(i,r),o.setParams(l),this.currentFeatureID=o.ID,null!==this.intlayer&&this.viewManagerDelegate.addFeature(o,this.viewManagerDelegate.renderLayers.indexOf(this.intlayer)),t.push(o.ID)),Ty(jy(n.prototype),"createNewComponent",this).call(this,this.typeString,a,t),this.viewManagerDelegate.saveDeviceState()}},{key:"showTarget",value:function(){if(null!==this.lastPoint){if(null===this.currentParameters)throw new Error("No parameters set");var e=Iv.getTarget(this.lastPoint);this.viewManagerDelegate.updateTarget(this.typeString,this.setString,e,this.currentParameters)}}}]),n}(Iv);function Vy(e){return Vy="function"===typeof Symbol&&"symbol"===typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"===typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Vy(e)}function By(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function Gy(e,t){for(var n=0;n3&&void 0!==arguments[3]?arguments[3]:null;return By(this,n),t.call(this,e,r,i)}return zy(n,[{key:"createNewFeature",value:function(e){var t=[],r=Math.floor(zh.viewManager.renderLayers.indexOf(this.viewManagerDelegate.currentLayer)/3),o=3*r,i=3*r,a=this.getCreationParameters(new v.a.Point(0,0)),l=ad.makeFeature(this.typeString,a);this.currentFeatureID=l.ID,this.viewManagerDelegate.addFeature(l,o),t.push(l.ID);var s=l.getParams(),u=Iv.getTarget([e.x,e.y]),c=this.typeString+"_cell",h=l.getParams();h["position"]=new jc("position",u),l=ad.makeFeature(c,a),l.setParams(h),this.currentFeatureID=l.ID,this.viewManagerDelegate.addFeature(l,i),t.push(l.ID),Uy(Zy(n.prototype),"createNewComponent",this).call(this,this.typeString,s,t),zh.viewManager.saveDeviceState()}},{key:"showTarget",value:function(){if(null!==this.lastPoint){if(null===this.currentParameters)throw new Error("No parameters set");var e=Iv.getTarget(this.lastPoint);this.viewManagerDelegate.updateTarget(this.typeString,this.setString,e,this.currentParameters)}}}]),n}(Iv);function em(e){return em="function"===typeof Symbol&&"symbol"===typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"===typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},em(e)}function tm(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function nm(e,t){for(var n=0;n4&&void 0!==arguments[4]?arguments[4]:i.NORMALLY_OPEN;tm(this,n);var u=Tc.getTypeForMINT(r);if(!u)throw new Error("Could not find type for MINT type "+r);l=t.call(this,e,u,o,a),l.valveType=s;var c=cm(l);return l.down=function(e){console.log(e);var t=sv.getEventPosition(e);if(null!==t){var n=Iv.getTarget([t.x,t.y]),r=c.checkIfConnectionExistsAt(new v.a.Point(n[0],n[1]));r?c.insertValve(t,r):e.ctrlKey||e.metaKey?(console.warn("Forcing placement of valve, a lot of things will not work correct if done this way"),c.forceInsertValve(t)):console.log("Could not find connection at this location")}},l}return rm(n,[{key:"createNewFeature",value:function(e){var t,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,o=[];t=r?{position:Iv.getTarget([e.x,e.y]),rotation:r}:{position:Iv.getTarget([e.x,e.y])};var i=Math.floor(this.viewManagerDelegate.renderLayers.indexOf(this.viewManagerDelegate.currentLayer)/3),a=3*i+1,l=ad.makeFeature(this.typeString,t);this.currentFeatureID=l.ID,this.viewManagerDelegate.addFeature(l,a),o.push(l.ID);var s=l.getParams(),u=om(fm(n.prototype),"createNewComponent",this).call(this,this.typeString,s,o);return u}},{key:"createNewMultiLayerFeature",value:function(e){var t,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,o=[];t=r?{position:Iv.getTarget([e.x,e.y]),rotation:r}:{position:Iv.getTarget([e.x,e.y])};var i=Math.floor(zh.viewManager.renderLayers.indexOf(this.viewManagerDelegate.currentLayer)/3),a=3*i,l=3*i+1,s=ad.makeFeature(this.typeString,t);this.currentFeatureID=s.ID,this.viewManagerDelegate.addFeature(s,a),o.push(s.ID);var u=s.getParams(),c=this.typeString+"_control",h=s.getParams();s=ad.makeFeature(c,t),s.setParams(h),this.currentFeatureID=s.ID,this.viewManagerDelegate.addFeature(s,l),o.push(s.ID);var f=om(fm(n.prototype),"createNewComponent",this).call(this,this.typeString,u,o);return f}},{key:"showTarget",value:function(){if(null!==this.lastPoint){var e=Iv.getTarget(this.lastPoint);this.viewManagerDelegate.updateTarget(this.typeString,this.setString,e,this.currentParameters)}}},{key:"checkIfConnectionExistsAt",value:function(e){var t=zh.viewManager.view.hitFeature(e,!1);if(t){var n=zh.currentDevice.getConnectionForFeatureID(t.featureID);return n}return null}},{key:"insertValve",value:function(e,t){var n,r=this.__getRotation(e,t);r<0&&(r+=180),this.valveType===i.NORMALLY_OPEN?(n=this.createNewFeature(e,r),this.viewManagerDelegate.currentDevice.insertValve(n,t,this.valveType)):this.valveType===i.NORMALLY_CLOSED&&(r+=90,n=this.createNewMultiLayerFeature(e,r),this.viewManagerDelegate.currentDevice.insertValve(n,t,this.valveType)),zh.viewManager.saveDeviceState()}},{key:"forceInsertValve",value:function(e){"Valve3D"==this.typeString?this.createNewMultiLayerFeature(e):this.createNewFeature(e),zh.viewManager.saveDeviceState()}},{key:"__getRotation",value:function(e,t){var n,r,o,i,a=1e21,l=t.getPaths(),s=[];for(var u in l){n=l[u];for(var c=0;c=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,a=!0,l=!1;return{s:function(){n=n.call(e)},n:function(){var e=n.next();return a=e.done,e},e:function(e){l=!0,i=e},f:function(){try{a||null==n.return||n.return()}finally{if(l)throw i}}}}function ym(e,t){if(e){if("string"===typeof e)return mm(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?mm(e,t):void 0}}function mm(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n0&&(r=a.wayPoints[a.wayPoints.length-1]),null===r)throw new Error("Last waypoint is null");var o=a.getNextOrthogonalPoint(r,n);a.lastPoint=[o[0],o[1]]}else a.lastPoint=[n[0],n[1]];a.dragging&&a.updateQueue.run(),a.showQueue.run()}},i}return _m(n,[{key:"state",get:function(){return this.__STATE}},{key:"showTarget",value:function(e){var t,n=Iv.getTarget([e.x,e.y]);null===(t=zh.viewManager)||void 0===t||t.updateTarget(this.typeString,this.setString,n)}},{key:"initChannel",value:function(){if(null===this.lastPoint)throw new Error("No last point to init channel");var e=this.__isPointOnComponent(new v.a.Point(this.lastPoint)),t=this.__isPointOnConnection(new v.a.Point(this.lastPoint));if(this.startPoint=Iv.getTarget(this.lastPoint),this.lastPoint=this.startPoint,e){var n=this.__getClosestComponentPort(e,this.startPoint);if(null!==n){var r=b.calculateAbsolutePosition(n,e);this.source=new Rf(e,n.label),this.startPoint=r,this.lastPoint=this.startPoint,this.wayPoints.push(r)}else this.source=new Rf(e,""),this.wayPoints.push(this.startPoint)}else t?(console.warn("Implement method to make the connection connections"),this.__currentConnectionObject=t,this.wayPoints.push(this.startPoint)):this.wayPoints.push(this.startPoint)}},{key:"updateChannel",value:function(){if(this.lastPoint&&this.startPoint)if(this.currentChannelID){var e,t=Iv.getTarget(this.lastPoint),n=null===(e=this.viewManagerDelegate.currentLayer)||void 0===e?void 0:e.getFeature(this.currentChannelID);null===n||void 0===n||n.updateParameter("end",t),null===n||void 0===n||n.updateParameter("wayPoints",this.wayPoints),null===n||void 0===n||n.updateParameter("segments",this.generateSegments())}else{var r;if(null===this.startPoint)throw new Error("No start point to update the channel");var o=this.createChannel(new v.a.Point(this.startPoint),new v.a.Point(this.startPoint));this.currentChannelID=o.ID,null===(r=zh.viewManager)||void 0===r||r.addFeature(o)}}},{key:"finishChannel",value:function(){var e;if(this.currentChannelID){var t;this.wayPoints.push(this.lastPoint);var n=this.viewManagerDelegate.currentLayer.getFeature(this.currentChannelID);null===n||void 0===n||n.updateParameter("end",this.lastPoint),null===n||void 0===n||n.updateParameter("segments",this.generateSegments());var r=null===n||void 0===n?void 0:n.getParams(),o={};for(var i in r)o[i]=r[i].value;var a=Tc.getDefinition("Connection"),l=new zc(o,vf.toMap(a.unique),vf.toMap(a.heritable));if(null===this.__currentConnectionObject||void 0===this.__currentConnectionObject){var s;if(null===this.viewManagerDelegate.currentLayer.physicalLayer)throw new Error("Error: Attempting to add connection on non-physical layer");var u=new Gf("Connection",l,zh.currentDevice.generateNewName("CHANNEL"),"CHANNEL",this.viewManagerDelegate.currentLayer.physicalLayer);u.routed=!0,u.addFeatureID(n.ID),u.addWayPoints(this.wayPoints),n.referenceID=u.id,this.__addConnectionTargets(u),null===(s=zh.currentDevice)||void 0===s||s.addConnection(u)}else this.__currentConnectionObject.addFeatureID(n.ID),n.referenceID=this.__currentConnectionObject.id,this.__currentConnectionObject.addWayPoints(this.wayPoints),n.referenceID=this.__currentConnectionObject.id,this.__addConnectionTargets(this.__currentConnectionObject);this.currentChannelID=null,this.wayPoints=[],this.source=null,this.sinks=[],this.__currentConnectionObject=null,null===(t=zh.viewManager)||void 0===t||t.saveDeviceState()}else console.error("Something is wrong here, unable to finish the connection");null===(e=zh.viewManager)||void 0===e||e.saveDeviceState()}},{key:"cleanup",value:function(){switch(console.log("Running Cleanup for the Connection Tool"),this.__STATE){case dm.PLACE_FIRST_POINT:console.log("Doing nothing");break;case dm.PLACE_WAYPOINT:console.warn("Paused connection placement midway");break;case dm.TARGET_PLACED_START_AGAIN:this.__STATE=dm.PLACE_FIRST_POINT,this.dragging=!1;break}}},{key:"addWayPoint",value:function(e,t){var n,r=sv.getEventPosition(e),o=this.__isPointOnComponent(r),i=this.__isPointOnConnection(r);if(null!==r){var a=Iv.getTarget([r.x,r.y]);if(t&&a){var l=this.startPoint;if(this.wayPoints.length>0&&(l=this.wayPoints[this.wayPoints.length-1]),null===l)throw new Error("Target is null");a=this.getNextOrthogonalPoint(l,a)}if(2==a.length&&this.wayPoints.push(a),o){if(null===this.startPoint)throw new Error("No start point to update the channel");var s=this.__getClosestComponentPort(o,this.startPoint,a);if(null!==s){var u=b.calculateAbsolutePosition(s,o);n=new Rf(o,s.label),this.wayPoints.pop(),this.lastPoint=u}else n=new Rf(o,""),this.lastPoint=this.wayPoints.pop();null===this.source?this.source=n:this.sinks.push(n),this.__STATE=dm.TARGET_PLACED_START_AGAIN,this.dragging=!1,this.finishChannel()}else i&&(console.log("There is connection at the waypoint path"),null===this.__currentConnectionObject?this.__currentConnectionObject=i:this.__currentConnectionObject.mergeConnection(i),this.__STATE=dm.TARGET_PLACED_START_AGAIN,this.dragging=!1,this.lastPoint=this.wayPoints.pop(),this.finishChannel())}}},{key:"__isPointOnConnection",value:function(e){var t,n=null===(t=zh.viewManager)||void 0===t?void 0:t.hitFeature(e);if(!1!==n&&null!==n&&void 0!==n){var r,o,i,a=null===(r=zh.viewManager)||void 0===r?void 0:r.getFeatureByID(n.featureID);return null!==a.referenceID&&(o=null===(i=zh.currentDevice)||void 0===i?void 0:i.getConnectionByID(a.referenceID),o)}return!1}},{key:"__isPointOnComponent",value:function(e){var t,n=null===(t=zh.viewManager)||void 0===t?void 0:t.hitFeature(e);if(!1!==n&&null!==n&&void 0!==n){var r,o,i,a=null===(r=zh.viewManager)||void 0===r?void 0:r.getFeatureByID(n.featureID);return null!==a.referenceID&&(o=null===(i=zh.currentDevice)||void 0===i?void 0:i.getComponentByID(a.referenceID),(null!==o||void 0!==o)&&o)}return!1}},{key:"createChannel",value:function(e,t){return ad.makeFeature(this.typeString,{start:e,end:t,wayPoints:this.wayPoints,segments:this.generateSegments()})}},{key:"getNextOrthogonalPoint",value:function(e,t){if(t[0]===e[0]||t[1]===e[1])return t;var n=[t[0],t[1]],r=Math.abs(t[0]-e[0]),o=Math.abs(t[1]-e[1]);return r2&&void 0!==arguments[2]?arguments[2]:null,l=null,s=null===(n=zh.currentGrid)||void 0===n?void 0:n.getSpacing();console.log("Grid Size: ",s),this.viewManagerDelegate.currentLayer.type===o.CONTROL?l="CONTROL":this.viewManagerDelegate.currentLayer.type===o.FLOW?l="FLOW":this.viewManagerDelegate.currentLayer.type===o.INTEGRATION&&(l="INTEGRATION"),console.log("This layer: ",l);var u=e.ports;if(null===l&&console.warn("Could not find the current layer type, searching through all the component ports without filtering"),null!==a){var c,h=gm(u.keys());try{for(h.s();!(c=h.n()).done;){var f=c.value,d=u.get(f);if(d.layer===l){var p=b.calculateAbsolutePosition(d,e),v=Math.abs(a[0]-p[0])+Math.abs(a[1]-p[1]);if(v<=3*s)return d}}}catch(C){h.e(C)}finally{h.f()}}i=1e15,r=null;var g,y=gm(u.keys());try{for(y.s();!(g=y.n()).done;){var m=g.value,w=u.get(m);if(w.layer===l){var _=b.calculateAbsolutePosition(w,e),P=Math.abs(t[0]-_[0])+Math.abs(t[1]-_[1]);P2&&void 0!==arguments[2]?arguments[2]:null;return ad.makeFeature(n,{start:e,end:t})}},{key:"getTarget",value:function(e){if(null===zh.viewManager)throw new Error("ViewManager not initialized");var t=zh.viewManager.snapToGrid(e);return t}}]),n}(sv);function fw(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function dw(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:"New Layer",n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:o.FLOW;gw(this,e),this.__type=r,this.features={},this.featureCount=0,this.name=t,this.params=n?n.params:new zc([],Yc.getUniqueParameters(),new Map),this._physicalLayer=n,r==o.FLOW?this.color="indigo":r==o.CONTROL?this.color="red":r==o.INTEGRATION?this.color="green":this.color=void 0,this.__id=Tc.generateID()}return mw(e,[{key:"physicalLayer",get:function(){return this._physicalLayer},set:function(e){this._physicalLayer=e}},{key:"type",get:function(){return this.__type}},{key:"id",get:function(){return this.__id}},{key:"addFeature",value:function(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];this.__ensureIsAFeature(e),this.features[e.ID]=e,this.featureCount+=1,null!==this.physicalLayer&&1==t?(this.physicalLayer.addFeature(e),e.layer=this.physicalLayer):e.layer=this.physicalLayer,e.setManufacturingInfoLayer()}},{key:"__ensureIsAFeature",value:function(e){if(!(e instanceof Bd)&&!(e instanceof Qd))throw new Error("Provided value"+e+" is not a Feature! Did you pass an ID by mistake?")}},{key:"__ensureFeatureExists",value:function(e){if(!this.containsFeature(e))throw new Error("Layer does not contain the specified feature!")}},{key:"__ensureFeatureIDExists",value:function(e){if(!this.containsFeatureID(e))throw new Error("Layer does not contain a feature with the specified ID!")}},{key:"getFeature",value:function(e){return this.__ensureFeatureIDExists(e),this.features[e]}},{key:"removeFeature",value:function(e){this.removeFeatureByID(e.ID)}},{key:"removeFeatureByID",value:function(e){this.__ensureFeatureIDExists(e),this.featureCount-=1;var t=this._physicalLayer;null!==t&&t.containsFeatureID(e)&&t.removeFeatureByID(e),delete this.features[e]}},{key:"containsFeature",value:function(e){return this.__ensureIsAFeature(e),this.features.hasOwnProperty(e.ID)}},{key:"containsFeatureID",value:function(e){return this.features.hasOwnProperty(e)}},{key:"getAllFeaturesFromLayer",value:function(){return this.features}},{key:"__featuresToJSON",value:function(){var e={};for(var t in this.features)e[t]=this.features[t].toJSON();return e}},{key:"__featuresInterchangeV1",value:function(){var e=[];for(var t in this.features)e.push(this.features[t].toInterchangeV1());return e}},{key:"__loadFeaturesFromJSON",value:function(e){for(var t in e)this.addFeature(Bd.fromJSON(e[t]))}},{key:"__loadFeaturesFromInterchangeV1",value:function(e){for(var t in e)this.addFeature(Bd.fromInterchangeV1(e[t]))}},{key:"__layerToInterchangeV1",value:function(){return null!==this._physicalLayer?this._physicalLayer.toInterchangeV1():null}},{key:"toInterchangeV1",value:function(){var e;e=this.physicalLayer?this.physicalLayer.id:null;var t={id:this.__id,name:this.name,modellayer:e,type:this.__type,features:this.__featuresInterchangeV1(),color:this.color};return t}}],[{key:"fromJSON",value:function(t){if(!Object.prototype.hasOwnProperty.call(t,"features"))throw new Error("JSON layer has no features!");var n=new e(t.name,null,t.type);return n.__loadFeaturesFromJSON(t.features),t.color&&(n.color=t.color),n}},{key:"fromInterchangeV1",value:function(t){var n;if(Object.prototype.hasOwnProperty.call(t,"type"))if("FLOW"===t.type)n=o.FLOW;else if("CONTROL"===t.type)n=o.CONTROL;else{if("INTEGRATION"!==t.type)throw new Error("Unknown layer type: "+t.type);n=o.INTEGRATION}var r=new e(t.name,null,n);return r.__loadFeaturesFromInterchangeV1(t.features),t.color&&(r.color=t.color),r}}]),e}();function bw(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function _w(e,t){for(var n=0;n=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,a=!0,l=!1;return{s:function(){n=n.call(e)},n:function(){var e=n.next();return a=e.done,e},e:function(e){l=!0,i=e},f:function(){try{a||null==n.return||n.return()}finally{if(l)throw i}}}}function Rw(e,t){return Fw(e)||Tw(e,t)||kw(e,t)||Lw()}function Lw(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function kw(e,t){if(e){if("string"===typeof e)return Dw(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?Dw(e,t):void 0}}function Dw(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n1&&void 0!==arguments[1])||arguments[1];r.ensureFeatureExists(e)&&(r.view.updateFeature(e),r.refresh(t))})),this.__grid.setColor(Rh),this.threeD=!1,this.renderer=zh.threeRenderer,this.currentLayer=this.renderLayers[0],this.activeRenderLayerIndex=0}return xw(e,[{key:"currentDevice",get:function(){return this.__currentDevice}},{key:"initiateCopy",value:function(){var e=this.view.getSelectedFeatures();e.length>0&&(this.pasteboard[0]=e[0])}},{key:"setupToolBars",value:function(){this.resetToDefaultTool()}},{key:"setNameMap",value:function(){for(var e=new Map,t=0;t1&&void 0!==arguments[1])||arguments[1];this.view.addDevice(e),this.__addAllDeviceLayers(e,!1),this.refresh(t)}},{key:"__addAllDeviceLayers",value:function(e){for(var t=0;t1&&void 0!==arguments[1])||arguments[1];this.view.removeDevice(),this.__removeAllDeviceLayers(e,!1),this.refresh(t)}},{key:"updateDevice",value:function(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];this.view.updateDevice(e),this.refresh(t)}},{key:"addFeature",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.activeRenderLayerIndex,n=!(arguments.length>2&&void 0!==arguments[2])||arguments[2],r=!(arguments.length>3&&void 0!==arguments[3])||arguments[3];this.renderLayers[t].addFeature(e,n),this.ensureFeatureExists(e)&&(this.view.addFeature(e),this.refresh(r))}},{key:"getNonphysElementFromFeatureID",value:function(e){for(var t in this.nonphysElements){var n=this.nonphysElements[t];for(var r in n.featureIDs)if(n.featureIDs[r]===e)return n}return null}},{key:"updateFeature",value:function(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];this.ensureFeatureExists(e)&&(this.view.updateFeature(e),this.refresh(t))}},{key:"removeFeature",value:function(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],n=this.getRenderLayerByID(e.ID);this.ensureFeatureExists(e)&&(this.view.removeFeature(e),this.refresh(t)),n.removeFeatureByID(e.ID)}},{key:"removeFeatureByID",value:function(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],n=this.getRenderLayerByID(e),r=n.getFeature(e);this.ensureFeatureExists(r)&&(this.view.removeFeature(r),this.refresh(t)),n.removeFeatureByID(e)}},{key:"addLayer",value:function(e,t){var n=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];this.__isLayerInCurrentDevice(e)&&(this.view.addLayer(e,t),this.__addAllLayerFeatures(e,t,!1),this.refresh(n))}},{key:"createNewLayerBlock",value:function(){var e,t,n,r,i,a,l;if(null===this.__currentDevice)throw new Error("No device set on ViewManager");var s=this.__currentDevice.layers.length;0!=s&&(s/=3);var u=[];u[0]=new Yc({z_offset:0,flip:!1},null===(e=this.currentDevice)||void 0===e?void 0:e.generateNewName("LayerFlow"),o.FLOW,s.toString()),u[1]=new Yc({z_offset:0,flip:!1},null===(t=this.currentDevice)||void 0===t?void 0:t.generateNewName("LayerControl"),o.CONTROL,s.toString()),u[2]=new Yc({z_offset:0,flip:!1},null===(n=this.currentDevice)||void 0===n?void 0:n.generateNewName("LayerIntegration"),o.INTEGRATION,s.toString()),this.__currentDevice.createNewLayerBlock(u);var c,h=[],f=null===(r=zh.currentDevice)||void 0===r?void 0:r.layers[0].features;for(var d in f)c=f[d],"EDGE"===c.fabType&&h.push(c);for(var p in u)for(var v in h)u[p].addFeature(h[v]);for(var g in u){var y=u[g],m=this.view.paperLayers.length;this.addLayer(y,m,!0)}for(var w in this.renderLayers[this.renderLayers.length]=new ww(null===(i=this.currentDevice)||void 0===i?void 0:i.generateNewName("RenderLayerFlow"),u[0],o.FLOW),this.renderLayers[this.renderLayers.length]=new ww(null===(a=this.currentDevice)||void 0===a?void 0:a.generateNewName("RenderLayerControl"),u[1],o.CONTROL),this.renderLayers[this.renderLayers.length]=new ww(null===(l=this.currentDevice)||void 0===l?void 0:l.generateNewName("RenderLayerIntegration"),u[2],o.INTEGRATION),h)this.renderLayers[this.renderLayers.length-3].addFeature(h[w]),this.renderLayers[this.renderLayers.length-2].addFeature(h[w]),this.renderLayers[this.renderLayers.length-1].addFeature(h[w]);console.log("Active Layer",this.activeRenderLayerIndex),this.setActiveRenderLayer(this.renderLayers.length-3)}},{key:"deleteLayerBlock",value:function(e){var t,n,r;null===(t=zh.currentDevice)||void 0===t||t.deleteLayer(3*e),null===(n=zh.currentDevice)||void 0===n||n.deleteLayer(3*e),null===(r=zh.currentDevice)||void 0===r||r.deleteLayer(3*e),this.renderLayers.splice(3*e,3),this.activeRenderLayerIndex>3*e+2?this.setActiveRenderLayer(this.activeRenderLayerIndex-3):this.activeRenderLayerIndex<3*e?console.log("No change"):0==e?0==this.renderLayers.length?this.setActiveRenderLayer(e):this.setActiveRenderLayer(0):this.setActiveRenderLayer(3*(e-1)),this.view.removeLayer(3*e),this.view.removeLayer(3*e),this.view.removeLayer(3*e),this.updateActiveLayer(),this.refresh()}},{key:"setActiveRenderLayer",value:function(e){this.activeRenderLayerIndex=e,this.currentLayer=this.renderLayers[e],this.updateActiveLayer()}},{key:"removeLayer",value:function(e,t){var n=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];this.__isLayerInCurrentDevice(e)&&(this.view.removeLayer(t),this.__removeAllLayerFeatures(e),this.refresh(n))}},{key:"layersToSVGStrings",value:function(){return this.view.layersToSVGStrings()}},{key:"__addAllLayerFeatures",value:function(e,t){var n=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];for(var r in e.features){var o=e.features[r];this.addFeature(o,t,!1),this.refresh(n)}}},{key:"__updateAllLayerFeatures",value:function(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];for(var n in e.features){var r=e.features[n];this.updateFeature(r,!1),this.refresh(t)}}},{key:"__removeAllLayerFeatures",value:function(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];for(var n in e.features){var r=e.features[n];this.removeFeature(r,!1),this.refresh(t)}}},{key:"updateLayer",value:function(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];this.__isLayerInCurrentDevice(e)&&this.refresh(t)}},{key:"updateActiveLayer",value:function(){var e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];null!==this.activeRenderLayerIndex?(this.view.setActiveLayer(this.activeRenderLayerIndex),this.refresh(e)):console.warn("Attempting update active layer in view manager with no active layer value")}},{key:"removeGrid",value:function(){var e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];this.__hasCurrentGrid()&&(this.view.removeGrid(),this.refresh(e))}},{key:"updateGrid",value:function(){var e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];this.__hasCurrentGrid()&&(this.view.updateGrid(zh.currentGrid),this.refresh(e),Wd.get().emit(Wd.UPDATE_GRID_SIZE))}},{key:"updateAlignmentMarks",value:function(){this.view.updateAlignmentMarks()}},{key:"clear",value:function(){this.view.clear()}},{key:"setZoom",value:function(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];e>this.maxZoom?e=this.maxZoom:e3&&void 0!==arguments[3]?arguments[3]:null,o=!(arguments.length>4&&void 0!==arguments[4])||arguments[4];this.view.addTarget(e,t,n,r),this.view.updateAlignmentMarks(),this.view.updateRatsNest(),this.refresh(o)}},{key:"__updateViewTarget",value:function(){var e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];this.view.updateTarget(),this.updateAlignmentMarks(),this.view.updateRatsNest(),this.view.updateComponentPortsRender(),this.refresh(e)}},{key:"adjustZoom",value:function(e,t){var n=!(arguments.length>2&&void 0!==arguments[2])||arguments[2],r=this.view.getZoom()>=this.maxZoom&&e<0,o=this.view.getZoom()<=this.minZoom&&e>0;o||r||(this.view.adjustZoom(e,new v.a.Point(t)),this.updateGrid(!1),this.view.updateRatsNest(),this.view.updateComponentPortsRender(),this.updateDevice(zh.currentDevice,!1),this.__updateViewTarget(!1)),this.refresh(n)}},{key:"setCenter",value:function(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];this.view.setCenter(e),this.updateGrid(!1),this.updateDevice(zh.currentDevice,!1),this.refresh(t)}},{key:"moveCenter",value:function(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];this.view.moveCenter(e),this.updateGrid(!1),this.view.updateRatsNest(),this.view.updateComponentPortsRender(),this.updateDevice(zh.currentDevice,!1),this.refresh(t)}},{key:"saveToStorage",value:function(){if(zh.viewManager)try{localStorage.setItem("currentDevice",JSON.stringify(zh.viewManager.generateExportJSON()))}catch(e){}}},{key:"refresh",value:function(){var e;this.updateQueue.run();null===(e=zh.currentGrid)||void 0===e||e.getSpacing()}},{key:"getEventPosition",value:function(e){return this.view.getProjectPosition(e.clientX,e.clientY)}},{key:"__hasCurrentGrid",value:function(){return!!zh.currentGrid}},{key:"__isLayerInCurrentDevice",value:function(e){return!(!zh.currentDevice||e.device!==zh.currentDevice)}},{key:"isFeatureInCurrentDevice",value:function(e){return!(!zh.currentDevice||!this.__isLayerInCurrentDevice(e.layer))}},{key:"ensureFeatureExists",value:function(e){for(var t=0;t0){for(var t=0;t0){var o=this.getFeaturesOfType(e,r);for(var i in o.length>0&&this.adjustAllFeatureParams(t,n,o),this.view.selectedComponents)this.view.selectedComponents[i].updateParameter(t,n);for(var a in this.view.selectedConnections)this.view.selectedConnections[a].updateParameter(t,n)}else this.updateDefault(e,t,n)}},{key:"updateDefault",value:function(e,t,n){var r=Tc.getDefaultsForType(e);r[t]=n}},{key:"updateDefaultsFromFeature",value:function(e){var t=e.getHeritableParams();for(var n in t)this.updateDefault(e.getType(),n,e.getValue(n))}},{key:"revertFieldToDefault",value:function(e,t){t.updateParameter(e,Tc.getDefaultsForType(t.getType())[e])}},{key:"revertFeatureToDefaults",value:function(e){var t=e.getHeritableParams();for(var n in t)this.revertFieldToDefault(n,e)}},{key:"revertFeaturesToDefaults",value:function(e){var t,n=Sw(e);try{for(n.s();!(t=n.n()).done;){var r=t.value;this.revertFeatureToDefaults(r)}}catch(o){n.e(o)}finally{n.f()}}},{key:"hitFeature",value:function(e){return this.view.hitFeature(e)}},{key:"getFeatureByID",value:function(e){var t=this.getRenderLayerByID(e);return t.getFeature(e)}},{key:"getRenderLayerByID",value:function(e){for(var t=0;t1&&void 0!==arguments[1]?arguments[1]:"SelectTool";if(null===this.tools[e])throw new Error("Could not find tool with the matching string");this.view.clearSelectedItems(),this.mouseAndKeyboardHandler.leftMouseTool=this.tools[e],this.mouseAndKeyboardHandler.rightMouseTool=this.tools[t],this.mouseAndKeyboardHandler.updateViewMouseEvents()}},{key:"switchTo2D",value:function(){if(null===zh.currentDevice)throw new Error("No device selected");if(this.threeD){this.threeD=!1;var e=this.renderer.getCameraCenterInMicrometers(),t=this.renderer.getZoom(),n=e[0];n<0?n=0:n>zh.currentDevice.getXSpan()&&(n=zh.currentDevice.getXSpan());var r=v.a.view.center.y-e[1];r<0?r=0:r>zh.currentDevice.getYSpan()&&(r=zh.currentDevice.getYSpan()),zh.viewManager.setCenter(new v.a.Point(n,r)),zh.viewManager.setZoom(t)}}},{key:"switchTo3D",value:function(){if(!this.threeD){this.threeD=!0,this.renderer.loadJSON(zh.currentDevice.toJSON());var e=this.view.getViewCenterInMillimeters(),t=zh.currentDevice.params.getValue("height")/1e3,n=this.view.getDeviceHeightInPixels();this.renderer.setupCamera(e[0],e[1],t,n,v.a.view.zoom),this.renderer.showMockup(),lg(this.__renderBlock,"hidden-block"),sg(this.__canvasBlock,"hidden-block"),sg(this.__renderBlock,"shown-block"),lg(this.__canvasBlock,"shown-block")}}},{key:"setupDragAndDropLoad",value:function(e){ug(e,(function(e){var t=e[0],n=new FileReader;n.onloadend=function(e){var t,n=this.result,r=JSON.parse(n);null===(t=zh.viewManager)||void 0===t||t.loadDeviceFromJSON(r)};try{n.readAsText(t)}catch(r){console.log("unable to load JSON: "+t)}}))}},{key:"killParamsWindow",value:function(){var e,t=document.getElementById("parameter_menu");t&&(null===(e=t.parentElement)||void 0===e||e.removeChild(t))}},{key:"saveDeviceState",value:function(){var e;console.log("Saving to stack");var t=JSON.stringify(null===(e=zh.currentDevice)||void 0===e?void 0:e.toInterchangeV1([]));this.undoStack.pushDesign(t)}},{key:"undo",value:function(){var e=this.undoStack.popDesign();if(console.log(e),e){var t=JSON.parse(e);this.loadDeviceFromJSON(t)}}},{key:"resetToDefaultTool",value:function(){this.cleanupActiveTools(),this.activateTool("MouseSelectTool")}},{key:"cleanupActiveTools",value:function(){this.mouseAndKeyboardHandler.leftMouseTool&&this.mouseAndKeyboardHandler.leftMouseTool.cleanup(),this.mouseAndKeyboardHandler.rightMouseTool&&this.mouseAndKeyboardHandler.rightMouseTool.cleanup()}},{key:"updatesConnectionRender",value:function(e){var t;e.regenerateSegments();var n=null===(t=zh.currentDevice)||void 0===t?void 0:t.getValvesForConnection(e);if(void 0===n||null===n)throw new Error("Valves are undefined or null when updating connection: "+e.id);for(var r in n){var o,i=n[r],a=null===(o=zh.currentDevice)||void 0===o?void 0:o.getValveType(i);if(a){var l=i.getBoundingRectangle();e.insertFeatureGap(l)}}}},{key:"showUIMessage",value:function(e){this.messageBox.MaterialSnackbar.showSnackbar({message:e})}},{key:"setupTools",value:function(){this.tools.MouseSelectTool=new ag(this,this.view),this.tools.InsertTextTool=new Xv(this),this.tools.Connection=new Dm(this,"Connection","Basic"),this.tools.MoveTool=new Kg(this),this.tools.GenerateArrayTool=new Bm(this)}},{key:"addCustomComponentTool",value:function(e){var t,n=null===(t=this.customComponentManager)||void 0===t?void 0:t.getCustomComponent(e);this.tools[e]=new Qm(this,n,"Custom")}},{key:"__initializeRatsNest",value:function(){var e,t=null===(e=this.currentDevice)||void 0===e?void 0:e.components,n=1e4,r=1e4;for(var o in t){var i=t[parseInt(o)],a=i.getPosition();0===a[0]&&0===a[1]?i.placed||this.__generateDefaultPlacementForComponent(i,n*(parseInt(o)+1),r*(Math.floor(parseInt(o)/5)+1)):i.placed||this.__generateDefaultPlacementForComponent(i,a[0],a[1])}this.view.updateRatsNest(),this.view.updateComponentPortsRender()}},{key:"__generateDefaultPlacementForComponent",value:function(e,t,n){var r=e.params.toJSON();r.position=[t,n];for(var o=Tc.getRenderTypeKeysForMINT(e.mint),i=0;i<(null===o||void 0===o?void 0:o.length);i++){var a=o[i],l=ad.makeFeature(a,r);e.addFeatureID(l.ID),this.currentLayer.addFeature(l)}e.updateComponentPosition([t,n])}},{key:"generateExportJSON",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],t=Nf.toInterchangeV1_2(this,e);return t}},{key:"loadCustomComponents",value:function(e){var t;Object.prototype.hasOwnProperty.call(e,"customComponents")&&(null===(t=this.customComponentManager)||void 0===t||t.loadFromJSON(e.customComponents))}},{key:"activateDAFDPlugin",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;this.loadDeviceFromJSON(JSON.parse(r.dafdtemplate)),null===e&&(e={orificeSize:750,orificeLength:200,oilInputWidth:800,waterInputWidth:900,outputWidth:900,outputLength:500,height:100}),vw.fixLayout(e)}},{key:"createValveMapFromSelection",value:function(){var e,t=this.tools.MouseSelectTool.currentSelection,n=[],r=null,o=Sw(t);try{for(o.s();!(e=o.n()).done;){var a=e.value,l=this.currentDevice.getComponentForFeatureID(a.featureID);if(null!==l){console.log("Component Type:",l.mint);var s=l.getType();"VALVE3D"!==s&&"VALVE"!==s||n.push(l)}r=this.currentDevice.getConnectionForFeatureID(a.featureID)}}catch(d){o.e(d)}finally{o.f()}for(var u=0,c=n;u0){var n,r="",o=Sw(e);try{for(o.s();!(n=o.n()).done;){var i=n.value;r+=i.toText()+"\n\n"}}catch(l){o.e(l)}finally{o.f()}var a=new Blob([r],{type:"text/plain"});Object(ov["saveAs"])(a,this.currentDevice.name+"_errors.txt")}}},{key:"createNewDevice",value:function(e){var t=new ad({"x-span":135e3,"y-span":85e3},e);console.log("Created new device: ",t.getXSpan(),t.getYSpan()),this.clear(),this.__currentDevice=t,this.activeRenderLayerIndex=0,this.createNewLayerBlock(),Ow(this.__currentDevice),this.setNameMap(),zh.currentDevice=t,this.activeRenderLayerIndex=0,this.addDevice(t),this.__initializeRatsNest(),this.view.initializeView(),this.updateGrid(),this.updateDevice(zh.currentDevice),this.refresh(!0),this.currentLayer=this.renderLayers[0],this.updateActiveLayer()}},{key:"getCurrentLevelRenderLayers",value:function(){var e=this.activeRenderLayerIndex%3,t=3*e+0,n=3*e+1,r=3*e+2;return[this.renderLayers[t],this.renderLayers[n],this.renderLayers[r]]}}]),e}(),Iw='{"name":"My Device","params":{"width":75800,"length":51000},"layers":[{"name":"flow","color":"indigo","params":{"z_offset":0,"flip":false},"features":{"97f1fd20-3ea6-11e5-8298-1b576ed4eb08":{"id":"97f1fd20-3ea6-11e5-8298-1b576ed4eb08","name":"New Port","type":"Port","params":{"position":[30000,40000],"radius1":700,"radius2":700,"height":100}},"97f1fd21-3ea6-11e5-8298-1b576ed4eb08":{"id":"97f1fd21-3ea6-11e5-8298-1b576ed4eb08","name":"New Port","type":"Port","params":{"position":[40000,40000],"radius1":700,"radius2":700,"height":100}},"97f22430-3ea6-11e5-8298-1b576ed4eb08":{"id":"97f22430-3ea6-11e5-8298-1b576ed4eb08","name":"New Port","type":"Port","params":{"position":[50000,40000],"radius1":700,"radius2":700,"height":100}},"97f22431-3ea6-11e5-8298-1b576ed4eb08":{"id":"97f22431-3ea6-11e5-8298-1b576ed4eb08","name":"New Port","type":"Port","params":{"position":[20000,40000],"radius1":700,"radius2":700,"height":100}},"97f22432-3ea6-11e5-8298-1b576ed4eb08":{"id":"97f22432-3ea6-11e5-8298-1b576ed4eb08","name":"New Channel","type":"Channel","params":{"start":[20000,40000],"end":[20000,35000],"width":400,"height":100}},"97f22433-3ea6-11e5-8298-1b576ed4eb08":{"id":"97f22433-3ea6-11e5-8298-1b576ed4eb08","name":"New Channel","type":"Channel","params":{"start":[20000,38000],"end":[17000,38000],"width":400,"height":100}},"97f22434-3ea6-11e5-8298-1b576ed4eb08":{"id":"97f22434-3ea6-11e5-8298-1b576ed4eb08","name":"New Channel","type":"Channel","params":{"start":[17000,38000],"end":[17000,35000],"width":400,"height":100}},"97f22435-3ea6-11e5-8298-1b576ed4eb08":{"id":"97f22435-3ea6-11e5-8298-1b576ed4eb08","name":"New Channel","type":"Channel","params":{"start":[20000,35000],"end":[20000,20000],"width":400,"height":100}},"97f22436-3ea6-11e5-8298-1b576ed4eb08":{"id":"97f22436-3ea6-11e5-8298-1b576ed4eb08","name":"New Channel","type":"Channel","params":{"start":[20000,20000],"end":[10000,10000],"width":400,"height":100}},"97f22437-3ea6-11e5-8298-1b576ed4eb08":{"id":"97f22437-3ea6-11e5-8298-1b576ed4eb08","name":"New Channel","type":"Channel","params":{"start":[17000,35000],"end":[15000,30000],"width":400,"height":100}},"97f22438-3ea6-11e5-8298-1b576ed4eb08":{"id":"97f22438-3ea6-11e5-8298-1b576ed4eb08","name":"New Channel","type":"Channel","params":{"start":[15000,30000],"end":[10000,30000],"width":400,"height":100}},"97f22439-3ea6-11e5-8298-1b576ed4eb08":{"id":"97f22439-3ea6-11e5-8298-1b576ed4eb08","name":"New Channel","type":"Channel","params":{"start":[10000,30000],"end":[10000,28000],"width":400,"height":100}},"97f2243a-3ea6-11e5-8298-1b576ed4eb08":{"id":"97f2243a-3ea6-11e5-8298-1b576ed4eb08","name":"New Channel","type":"Channel","params":{"start":[10000,28000],"end":[15000,28000],"width":400,"height":100}},"97f2243b-3ea6-11e5-8298-1b576ed4eb08":{"id":"97f2243b-3ea6-11e5-8298-1b576ed4eb08","name":"New Channel","type":"Channel","params":{"start":[15000,28000],"end":[15000,25000],"width":400,"height":100}},"97f2243c-3ea6-11e5-8298-1b576ed4eb08":{"id":"97f2243c-3ea6-11e5-8298-1b576ed4eb08","name":"New Channel","type":"Channel","params":{"start":[15000,25000],"end":[8000,25000],"width":400,"height":100}},"97f2243d-3ea6-11e5-8298-1b576ed4eb08":{"id":"97f2243d-3ea6-11e5-8298-1b576ed4eb08","name":"New Port","type":"Port","params":{"position":[8000,25000],"radius1":700,"radius2":700,"height":100}},"97f2243e-3ea6-11e5-8298-1b576ed4eb08":{"id":"97f2243e-3ea6-11e5-8298-1b576ed4eb08","name":"New Port","type":"Port","params":{"position":[10000,10000],"radius1":700,"radius2":700,"height":100}},"97f2243f-3ea6-11e5-8298-1b576ed4eb08":{"id":"97f2243f-3ea6-11e5-8298-1b576ed4eb08","name":"New Channel","type":"Channel","params":{"start":[30000,40000],"end":[30000,20000],"width":400,"height":100}},"97f22440-3ea6-11e5-8298-1b576ed4eb08":{"id":"97f22440-3ea6-11e5-8298-1b576ed4eb08","name":"New Channel","type":"Channel","params":{"start":[30000,20000],"end":[20000,10000],"width":400,"height":100}},"97f22441-3ea6-11e5-8298-1b576ed4eb08":{"id":"97f22441-3ea6-11e5-8298-1b576ed4eb08","name":"New Port","type":"Port","params":{"position":[20000,10000],"radius1":700,"radius2":700,"height":100}},"97f22442-3ea6-11e5-8298-1b576ed4eb08":{"id":"97f22442-3ea6-11e5-8298-1b576ed4eb08","name":"New Channel","type":"Channel","params":{"start":[30000,38000],"end":[27000,38000],"width":400,"height":100}},"97f22443-3ea6-11e5-8298-1b576ed4eb08":{"id":"97f22443-3ea6-11e5-8298-1b576ed4eb08","name":"New Channel","type":"Channel","params":{"start":[27000,38000],"end":[27000,30000],"width":400,"height":100}},"97f22444-3ea6-11e5-8298-1b576ed4eb08":{"id":"97f22444-3ea6-11e5-8298-1b576ed4eb08","name":"New Channel","type":"Channel","params":{"start":[27000,30000],"end":[22000,30000],"width":400,"height":100}},"97f22445-3ea6-11e5-8298-1b576ed4eb08":{"id":"97f22445-3ea6-11e5-8298-1b576ed4eb08","name":"New Channel","type":"Channel","params":{"start":[22000,30000],"end":[22000,28000],"width":400,"height":100}},"97f22446-3ea6-11e5-8298-1b576ed4eb08":{"id":"97f22446-3ea6-11e5-8298-1b576ed4eb08","name":"New Channel","type":"Channel","params":{"start":[22000,28000],"end":[27000,28000],"width":400,"height":100}},"97f24b40-3ea6-11e5-8298-1b576ed4eb08":{"id":"97f24b40-3ea6-11e5-8298-1b576ed4eb08","name":"New Channel","type":"Channel","params":{"start":[27000,28000],"end":[27000,26000],"width":400,"height":100}},"97f24b41-3ea6-11e5-8298-1b576ed4eb08":{"id":"97f24b41-3ea6-11e5-8298-1b576ed4eb08","name":"New Channel","type":"Channel","params":{"start":[27000,26000],"end":[22000,26000],"width":400,"height":100}},"97f24b42-3ea6-11e5-8298-1b576ed4eb08":{"id":"97f24b42-3ea6-11e5-8298-1b576ed4eb08","name":"New Channel","type":"Channel","params":{"start":[22000,26000],"end":[22000,24000],"width":400,"height":100}},"97f24b43-3ea6-11e5-8298-1b576ed4eb08":{"id":"97f24b43-3ea6-11e5-8298-1b576ed4eb08","name":"New Channel","type":"Channel","params":{"start":[22000,24000],"end":[27000,24000],"width":400,"height":100}},"97f24b44-3ea6-11e5-8298-1b576ed4eb08":{"id":"97f24b44-3ea6-11e5-8298-1b576ed4eb08","name":"New Channel","type":"Channel","params":{"start":[27000,24000],"end":[27000,22000],"width":400,"height":100}},"97f24b45-3ea6-11e5-8298-1b576ed4eb08":{"id":"97f24b45-3ea6-11e5-8298-1b576ed4eb08","name":"New Channel","type":"Channel","params":{"start":[27000,22000],"end":[22000,22000],"width":400,"height":100}},"97f24b46-3ea6-11e5-8298-1b576ed4eb08":{"id":"97f24b46-3ea6-11e5-8298-1b576ed4eb08","name":"New Channel","type":"Channel","params":{"start":[22000,22000],"end":[22000,20000],"width":400,"height":100}},"97f24b47-3ea6-11e5-8298-1b576ed4eb08":{"id":"97f24b47-3ea6-11e5-8298-1b576ed4eb08","name":"New Channel","type":"Channel","params":{"start":[22000,20000],"end":[25000,20000],"width":400,"height":100}},"97f24b48-3ea6-11e5-8298-1b576ed4eb08":{"id":"97f24b48-3ea6-11e5-8298-1b576ed4eb08","name":"New Channel","type":"Channel","params":{"start":[25000,20000],"end":[25000,17000],"width":400,"height":100}},"97f24b49-3ea6-11e5-8298-1b576ed4eb08":{"id":"97f24b49-3ea6-11e5-8298-1b576ed4eb08","name":"New Channel","type":"Channel","params":{"start":[25000,17000],"end":[21000,17000],"width":400,"height":100}},"97f24b4a-3ea6-11e5-8298-1b576ed4eb08":{"id":"97f24b4a-3ea6-11e5-8298-1b576ed4eb08","name":"New Port","type":"Port","params":{"position":[21000,17000],"radius1":700,"radius2":700,"height":100}},"97f24b4b-3ea6-11e5-8298-1b576ed4eb08":{"id":"97f24b4b-3ea6-11e5-8298-1b576ed4eb08","name":"New Channel","type":"Channel","params":{"start":[40000,40000],"end":[40000,20000],"width":400,"height":100}},"97f24b4c-3ea6-11e5-8298-1b576ed4eb08":{"id":"97f24b4c-3ea6-11e5-8298-1b576ed4eb08","name":"New Channel","type":"Channel","params":{"start":[40000,20000],"end":[50000,10000],"width":400,"height":100}},"97f24b4d-3ea6-11e5-8298-1b576ed4eb08":{"id":"97f24b4d-3ea6-11e5-8298-1b576ed4eb08","name":"New Channel","type":"Channel","params":{"start":[40000,38000],"end":[43000,38000],"width":400,"height":100}},"97f24b4e-3ea6-11e5-8298-1b576ed4eb08":{"id":"97f24b4e-3ea6-11e5-8298-1b576ed4eb08","name":"New Channel","type":"Channel","params":{"start":[43000,38000],"end":[43000,30000],"width":400,"height":100}},"97f24b4f-3ea6-11e5-8298-1b576ed4eb08":{"id":"97f24b4f-3ea6-11e5-8298-1b576ed4eb08","name":"New Channel","type":"Channel","params":{"start":[43000,30000],"end":[48000,30000],"width":400,"height":100}},"97f24b50-3ea6-11e5-8298-1b576ed4eb08":{"id":"97f24b50-3ea6-11e5-8298-1b576ed4eb08","name":"New Channel","type":"Channel","params":{"start":[48000,30000],"end":[48000,28000],"width":400,"height":100}},"97f24b51-3ea6-11e5-8298-1b576ed4eb08":{"id":"97f24b51-3ea6-11e5-8298-1b576ed4eb08","name":"New Channel","type":"Channel","params":{"start":[48000,28000],"end":[43000,28000],"width":400,"height":100}},"97f24b52-3ea6-11e5-8298-1b576ed4eb08":{"id":"97f24b52-3ea6-11e5-8298-1b576ed4eb08","name":"New Channel","type":"Channel","params":{"start":[43000,28000],"end":[43000,26000],"width":400,"height":100}},"97f24b53-3ea6-11e5-8298-1b576ed4eb08":{"id":"97f24b53-3ea6-11e5-8298-1b576ed4eb08","name":"New Channel","type":"Channel","params":{"start":[43000,26000],"end":[48000,26000],"width":400,"height":100}},"97f24b54-3ea6-11e5-8298-1b576ed4eb08":{"id":"97f24b54-3ea6-11e5-8298-1b576ed4eb08","name":"New Channel","type":"Channel","params":{"start":[48000,26000],"end":[48000,24000],"width":400,"height":100}},"97f24b55-3ea6-11e5-8298-1b576ed4eb08":{"id":"97f24b55-3ea6-11e5-8298-1b576ed4eb08","name":"New Channel","type":"Channel","params":{"start":[48000,24000],"end":[43000,24000],"width":400,"height":100}},"97f24b56-3ea6-11e5-8298-1b576ed4eb08":{"id":"97f24b56-3ea6-11e5-8298-1b576ed4eb08","name":"New Channel","type":"Channel","params":{"start":[43000,24000],"end":[43000,22000],"width":400,"height":100}},"97f24b57-3ea6-11e5-8298-1b576ed4eb08":{"id":"97f24b57-3ea6-11e5-8298-1b576ed4eb08","name":"New Channel","type":"Channel","params":{"start":[43000,22000],"end":[48000,22000],"width":400,"height":100}},"97f24b58-3ea6-11e5-8298-1b576ed4eb08":{"id":"97f24b58-3ea6-11e5-8298-1b576ed4eb08","name":"New Channel","type":"Channel","params":{"start":[48000,22000],"end":[48000,20000],"width":400,"height":100}},"97f24b59-3ea6-11e5-8298-1b576ed4eb08":{"id":"97f24b59-3ea6-11e5-8298-1b576ed4eb08","name":"New Channel","type":"Channel","params":{"start":[48000,20000],"end":[45000,20000],"width":400,"height":100}},"97f24b5a-3ea6-11e5-8298-1b576ed4eb08":{"id":"97f24b5a-3ea6-11e5-8298-1b576ed4eb08","name":"New Channel","type":"Channel","params":{"start":[45000,20000],"end":[45000,17000],"width":400,"height":100}},"97f24b5b-3ea6-11e5-8298-1b576ed4eb08":{"id":"97f24b5b-3ea6-11e5-8298-1b576ed4eb08","name":"New Channel","type":"Channel","params":{"start":[45000,17000],"end":[49000,17000],"width":400,"height":100}},"97f24b5c-3ea6-11e5-8298-1b576ed4eb08":{"id":"97f24b5c-3ea6-11e5-8298-1b576ed4eb08","name":"New Port","type":"Port","params":{"position":[50000,10000],"radius1":700,"radius2":700,"height":100}},"97f24b5d-3ea6-11e5-8298-1b576ed4eb08":{"id":"97f24b5d-3ea6-11e5-8298-1b576ed4eb08","name":"New Port","type":"Port","params":{"position":[49000,17000],"radius1":700,"radius2":700,"height":100}},"97f24b5e-3ea6-11e5-8298-1b576ed4eb08":{"id":"97f24b5e-3ea6-11e5-8298-1b576ed4eb08","name":"New Channel","type":"Channel","params":{"start":[50000,40000],"end":[50000,20000],"width":400,"height":100}},"97f24b5f-3ea6-11e5-8298-1b576ed4eb08":{"id":"97f24b5f-3ea6-11e5-8298-1b576ed4eb08","name":"New Channel","type":"Channel","params":{"start":[50000,20000],"end":[60000,10000],"width":400,"height":100}},"97f24b60-3ea6-11e5-8298-1b576ed4eb08":{"id":"97f24b60-3ea6-11e5-8298-1b576ed4eb08","name":"New Port","type":"Port","params":{"position":[60000,10000],"radius1":700,"radius2":700,"height":100}},"97f27250-3ea6-11e5-8298-1b576ed4eb08":{"id":"97f27250-3ea6-11e5-8298-1b576ed4eb08","name":"New Channel","type":"Channel","params":{"start":[50000,38000],"end":[53000,38000],"width":400,"height":100}},"97f27251-3ea6-11e5-8298-1b576ed4eb08":{"id":"97f27251-3ea6-11e5-8298-1b576ed4eb08","name":"New Channel","type":"Channel","params":{"start":[53000,38000],"end":[53000,35000],"width":400,"height":100}},"97f27252-3ea6-11e5-8298-1b576ed4eb08":{"id":"97f27252-3ea6-11e5-8298-1b576ed4eb08","name":"New Channel","type":"Channel","params":{"start":[53000,35000],"end":[55000,30000],"width":400,"height":100}},"97f27253-3ea6-11e5-8298-1b576ed4eb08":{"id":"97f27253-3ea6-11e5-8298-1b576ed4eb08","name":"New Channel","type":"Channel","params":{"start":[55000,30000],"end":[60000,30000],"width":400,"height":100}},"97f27254-3ea6-11e5-8298-1b576ed4eb08":{"id":"97f27254-3ea6-11e5-8298-1b576ed4eb08","name":"New Channel","type":"Channel","params":{"start":[60000,30000],"end":[60000,28000],"width":400,"height":100}},"97f27255-3ea6-11e5-8298-1b576ed4eb08":{"id":"97f27255-3ea6-11e5-8298-1b576ed4eb08","name":"New Channel","type":"Channel","params":{"start":[60000,28000],"end":[55000,28000],"width":400,"height":100}},"97f27256-3ea6-11e5-8298-1b576ed4eb08":{"id":"97f27256-3ea6-11e5-8298-1b576ed4eb08","name":"New Channel","type":"Channel","params":{"start":[55000,28000],"end":[55000,25000],"width":400,"height":100}},"97f27257-3ea6-11e5-8298-1b576ed4eb08":{"id":"97f27257-3ea6-11e5-8298-1b576ed4eb08","name":"New Channel","type":"Channel","params":{"start":[55000,25000],"end":[62000,25000],"width":400,"height":100}},"97f27258-3ea6-11e5-8298-1b576ed4eb08":{"id":"97f27258-3ea6-11e5-8298-1b576ed4eb08","name":"New Port","type":"Port","params":{"position":[62000,25000],"radius1":700,"radius2":700,"height":100}},"97f27259-3ea6-11e5-8298-1b576ed4eb08":{"id":"97f27259-3ea6-11e5-8298-1b576ed4eb08","name":"New Channel","type":"Channel","params":{"start":[15000,15000],"end":[15000,12000],"width":400,"height":100}},"97f2725a-3ea6-11e5-8298-1b576ed4eb08":{"id":"97f2725a-3ea6-11e5-8298-1b576ed4eb08","name":"New Via","type":"Via","params":{"position":[15000,12000],"radius1":800,"radius2":700,"height":1100}},"97f2725b-3ea6-11e5-8298-1b576ed4eb08":{"id":"97f2725b-3ea6-11e5-8298-1b576ed4eb08","name":"New Via","type":"Via","params":{"position":[26000,12000],"radius1":800,"radius2":700,"height":1100}},"97f2725c-3ea6-11e5-8298-1b576ed4eb08":{"id":"97f2725c-3ea6-11e5-8298-1b576ed4eb08","name":"New Via","type":"Via","params":{"position":[44000,12000],"radius1":800,"radius2":700,"height":1100}},"97f2725d-3ea6-11e5-8298-1b576ed4eb08":{"id":"97f2725d-3ea6-11e5-8298-1b576ed4eb08","name":"New Via","type":"Via","params":{"position":[55000,12000],"radius1":800,"radius2":700,"height":1100}},"97f2725e-3ea6-11e5-8298-1b576ed4eb08":{"id":"97f2725e-3ea6-11e5-8298-1b576ed4eb08","name":"New Channel","type":"Channel","params":{"start":[55000,12000],"end":[55000,15000],"width":400,"height":100}},"97f2725f-3ea6-11e5-8298-1b576ed4eb08":{"id":"97f2725f-3ea6-11e5-8298-1b576ed4eb08","name":"New Channel","type":"Channel","params":{"start":[26000,12000],"end":[30000,10000],"width":400,"height":100}},"97f27260-3ea6-11e5-8298-1b576ed4eb08":{"id":"97f27260-3ea6-11e5-8298-1b576ed4eb08","name":"New Channel","type":"Channel","params":{"start":[44000,12000],"end":[40000,10000],"width":400,"height":100}},"97f27261-3ea6-11e5-8298-1b576ed4eb08":{"id":"97f27261-3ea6-11e5-8298-1b576ed4eb08","name":"New Channel","type":"Channel","params":{"start":[40000,10000],"end":[38000,7000],"width":400,"height":100}},"97f27262-3ea6-11e5-8298-1b576ed4eb08":{"id":"97f27262-3ea6-11e5-8298-1b576ed4eb08","name":"New Channel","type":"Channel","params":{"start":[30000,10000],"end":[32000,7000],"width":400,"height":100}},"97f27263-3ea6-11e5-8298-1b576ed4eb08":{"id":"97f27263-3ea6-11e5-8298-1b576ed4eb08","name":"New Port","type":"Port","params":{"position":[32000,7000],"radius1":700,"radius2":700,"height":100}},"97f27264-3ea6-11e5-8298-1b576ed4eb08":{"id":"97f27264-3ea6-11e5-8298-1b576ed4eb08","name":"New Port","type":"Port","params":{"position":[38000,7000],"radius1":700,"radius2":700,"height":100}},"97f27265-3ea6-11e5-8298-1b576ed4eb08":{"id":"97f27265-3ea6-11e5-8298-1b576ed4eb08","name":"New CircleValve","type":"CircleValve","params":{"position":[35000,10000],"radius1":1400,"radius2":1200,"height":800}},"97f27266-3ea6-11e5-8298-1b576ed4eb08":{"id":"97f27266-3ea6-11e5-8298-1b576ed4eb08","name":"New Channel","type":"Channel","params":{"start":[35000,10000],"end":[35000,30000],"width":400,"height":100}},"97f27267-3ea6-11e5-8298-1b576ed4eb08":{"id":"97f27267-3ea6-11e5-8298-1b576ed4eb08","name":"New Port","type":"Port","params":{"position":[35000,30000],"radius1":700,"radius2":700,"height":100}},"97f27268-3ea6-11e5-8298-1b576ed4eb08":{"id":"97f27268-3ea6-11e5-8298-1b576ed4eb08","name":"New Channel","type":"Channel","params":{"start":[35000,17000],"end":[38000,23000],"width":400,"height":100}},"97f27269-3ea6-11e5-8298-1b576ed4eb08":{"id":"97f27269-3ea6-11e5-8298-1b576ed4eb08","name":"New Channel","type":"Channel","params":{"start":[38000,23000],"end":[36000,25000],"width":400,"height":100}},"97f2726a-3ea6-11e5-8298-1b576ed4eb08":{"id":"97f2726a-3ea6-11e5-8298-1b576ed4eb08","name":"New Channel","type":"Channel","params":{"start":[36000,25000],"end":[35000,30000],"width":400,"height":100}},"97f2726b-3ea6-11e5-8298-1b576ed4eb08":{"id":"97f2726b-3ea6-11e5-8298-1b576ed4eb08","name":"New Channel","type":"Channel","params":{"start":[35000,17000],"end":[32000,23000],"width":400,"height":100}},"97f2726c-3ea6-11e5-8298-1b576ed4eb08":{"id":"97f2726c-3ea6-11e5-8298-1b576ed4eb08","name":"New Channel","type":"Channel","params":{"start":[32000,23000],"end":[34000,25000],"width":400,"height":100}},"97f2726d-3ea6-11e5-8298-1b576ed4eb08":{"id":"97f2726d-3ea6-11e5-8298-1b576ed4eb08","name":"New Channel","type":"Channel","params":{"start":[34000,25000],"end":[35000,30000],"width":400,"height":100}},"97f2726e-3ea6-11e5-8298-1b576ed4eb08":{"id":"97f2726e-3ea6-11e5-8298-1b576ed4eb08","name":"New Channel","type":"Channel","params":{"start":[32000,23000],"end":[35000,24000],"width":400,"height":100}},"97f2726f-3ea6-11e5-8298-1b576ed4eb08":{"id":"97f2726f-3ea6-11e5-8298-1b576ed4eb08","name":"New Channel","type":"Channel","params":{"start":[38000,23000],"end":[35000,24000],"width":400,"height":100}},"97f27270-3ea6-11e5-8298-1b576ed4eb08":{"id":"97f27270-3ea6-11e5-8298-1b576ed4eb08","name":"New Channel","type":"Channel","params":{"start":[25000,20000],"end":[28000,20000],"width":400,"height":100}},"97f27271-3ea6-11e5-8298-1b576ed4eb08":{"id":"97f27271-3ea6-11e5-8298-1b576ed4eb08","name":"New Channel","type":"Channel","params":{"start":[28000,20000],"end":[28000,22000],"width":400,"height":100}},"97f27272-3ea6-11e5-8298-1b576ed4eb08":{"id":"97f27272-3ea6-11e5-8298-1b576ed4eb08","name":"New Channel","type":"Channel","params":{"start":[28000,22000],"end":[27000,22000],"width":400,"height":100}},"97f27273-3ea6-11e5-8298-1b576ed4eb08":{"id":"97f27273-3ea6-11e5-8298-1b576ed4eb08","name":"New Channel","type":"Channel","params":{"start":[45000,20000],"end":[42000,20000],"width":400,"height":100}},"97f27274-3ea6-11e5-8298-1b576ed4eb08":{"id":"97f27274-3ea6-11e5-8298-1b576ed4eb08","name":"New Channel","type":"Channel","params":{"start":[42000,20000],"end":[42000,22000],"width":400,"height":100}},"97f27275-3ea6-11e5-8298-1b576ed4eb08":{"id":"97f27275-3ea6-11e5-8298-1b576ed4eb08","name":"New Channel","type":"Channel","params":{"start":[42000,22000],"end":[44000,22000],"width":400,"height":100}},"97f27276-3ea6-11e5-8298-1b576ed4eb08":{"id":"97f27276-3ea6-11e5-8298-1b576ed4eb08","name":"New Via","type":"Via","params":{"position":[35000,30000],"radius1":800,"radius2":700,"height":1100}},"97f27277-3ea6-11e5-8298-1b576ed4eb08":{"id":"97f27277-3ea6-11e5-8298-1b576ed4eb08","name":"New Via","type":"Via","params":{"position":[32000,20000],"radius1":800,"radius2":700,"height":1100}},"97f27278-3ea6-11e5-8298-1b576ed4eb08":{"id":"97f27278-3ea6-11e5-8298-1b576ed4eb08","name":"New Via","type":"Via","params":{"position":[38000,20000],"radius1":800,"radius2":700,"height":1100}},"a2de7790-3ea6-11e5-8298-1b576ed4eb08":{"id":"a2de7790-3ea6-11e5-8298-1b576ed4eb08","name":"New CircleValve","type":"CircleValve","params":{"position":[10000,20000],"radius1":1400,"radius2":1200,"height":800}},"a3d819d0-3ea6-11e5-8298-1b576ed4eb08":{"id":"a3d819d0-3ea6-11e5-8298-1b576ed4eb08","name":"New CircleValve","type":"CircleValve","params":{"position":[60000,20000],"radius1":1400,"radius2":1200,"height":800}}}},{"name":"control","color":"red","params":{"z_offset":1200,"flip":true},"features":{"97f27279-3ea6-11e5-8298-1b576ed4eb08":{"id":"97f27279-3ea6-11e5-8298-1b576ed4eb08","name":"New CircleValve","type":"CircleValve","params":{"position":[20000,34000],"radius1":1400,"radius2":1200,"height":800}},"97f2727a-3ea6-11e5-8298-1b576ed4eb08":{"id":"97f2727a-3ea6-11e5-8298-1b576ed4eb08","name":"New CircleValve","type":"CircleValve","params":{"position":[30000,34000],"radius1":1400,"radius2":1200,"height":800}},"97f2727b-3ea6-11e5-8298-1b576ed4eb08":{"id":"97f2727b-3ea6-11e5-8298-1b576ed4eb08","name":"New CircleValve","type":"CircleValve","params":{"position":[40000,34000],"radius1":1400,"radius2":1200,"height":800}},"97f2727c-3ea6-11e5-8298-1b576ed4eb08":{"id":"97f2727c-3ea6-11e5-8298-1b576ed4eb08","name":"New CircleValve","type":"CircleValve","params":{"position":[50000,34000],"radius1":1400,"radius2":1200,"height":800}},"97f2727d-3ea6-11e5-8298-1b576ed4eb08":{"id":"97f2727d-3ea6-11e5-8298-1b576ed4eb08","name":"New Channel","type":"Channel","params":{"start":[20000,34000],"end":[24000,34000],"width":400,"height":100}},"97f2727e-3ea6-11e5-8298-1b576ed4eb08":{"id":"97f2727e-3ea6-11e5-8298-1b576ed4eb08","name":"New Channel","type":"Channel","params":{"start":[24000,34000],"end":[24000,47000],"width":400,"height":100}},"97f29960-3ea6-11e5-8298-1b576ed4eb08":{"id":"97f29960-3ea6-11e5-8298-1b576ed4eb08","name":"New Channel","type":"Channel","params":{"start":[30000,34000],"end":[34000,34000],"width":400,"height":100}},"97f29961-3ea6-11e5-8298-1b576ed4eb08":{"id":"97f29961-3ea6-11e5-8298-1b576ed4eb08","name":"New Channel","type":"Channel","params":{"start":[34000,34000],"end":[34000,47000],"width":400,"height":100}},"97f29962-3ea6-11e5-8298-1b576ed4eb08":{"id":"97f29962-3ea6-11e5-8298-1b576ed4eb08","name":"New Channel","type":"Channel","params":{"start":[40000,34000],"end":[37000,34000],"width":400,"height":100}},"97f29963-3ea6-11e5-8298-1b576ed4eb08":{"id":"97f29963-3ea6-11e5-8298-1b576ed4eb08","name":"New Channel","type":"Channel","params":{"start":[37000,34000],"end":[36000,34000],"width":400,"height":100}},"97f29964-3ea6-11e5-8298-1b576ed4eb08":{"id":"97f29964-3ea6-11e5-8298-1b576ed4eb08","name":"New Channel","type":"Channel","params":{"start":[36000,34000],"end":[36000,47000],"width":400,"height":100}},"97f29965-3ea6-11e5-8298-1b576ed4eb08":{"id":"97f29965-3ea6-11e5-8298-1b576ed4eb08","name":"New Channel","type":"Channel","params":{"start":[50000,34000],"end":[46000,34000],"width":400,"height":100}},"97f29966-3ea6-11e5-8298-1b576ed4eb08":{"id":"97f29966-3ea6-11e5-8298-1b576ed4eb08","name":"New Channel","type":"Channel","params":{"start":[46000,34000],"end":[46000,47000],"width":400,"height":100}},"97f29967-3ea6-11e5-8298-1b576ed4eb08":{"id":"97f29967-3ea6-11e5-8298-1b576ed4eb08","name":"New Port","type":"Port","params":{"position":[24000,47000],"radius1":700,"radius2":700,"height":100}},"97f29968-3ea6-11e5-8298-1b576ed4eb08":{"id":"97f29968-3ea6-11e5-8298-1b576ed4eb08","name":"New Port","type":"Port","params":{"position":[34000,47000],"radius1":700,"radius2":700,"height":100}},"97f29969-3ea6-11e5-8298-1b576ed4eb08":{"id":"97f29969-3ea6-11e5-8298-1b576ed4eb08","name":"New Port","type":"Port","params":{"position":[36000,47000],"radius1":700,"radius2":700,"height":100}},"97f2996a-3ea6-11e5-8298-1b576ed4eb08":{"id":"97f2996a-3ea6-11e5-8298-1b576ed4eb08","name":"New Port","type":"Port","params":{"position":[46000,47000],"radius1":700,"radius2":700,"height":100}},"97f2996b-3ea6-11e5-8298-1b576ed4eb08":{"id":"97f2996b-3ea6-11e5-8298-1b576ed4eb08","name":"New Channel","type":"Channel","params":{"start":[15000,12000],"end":[26000,12000],"width":400,"height":100}},"97f2996c-3ea6-11e5-8298-1b576ed4eb08":{"id":"97f2996c-3ea6-11e5-8298-1b576ed4eb08","name":"New Channel","type":"Channel","params":{"start":[44000,12000],"end":[55000,12000],"width":400,"height":100}},"97f2996d-3ea6-11e5-8298-1b576ed4eb08":{"id":"97f2996d-3ea6-11e5-8298-1b576ed4eb08","name":"New Port","type":"Port","params":{"position":[15000,12000],"radius1":700,"radius2":700,"height":100}},"97f2996e-3ea6-11e5-8298-1b576ed4eb08":{"id":"97f2996e-3ea6-11e5-8298-1b576ed4eb08","name":"New Port","type":"Port","params":{"position":[26000,12000],"radius1":700,"radius2":700,"height":100}},"97f2996f-3ea6-11e5-8298-1b576ed4eb08":{"id":"97f2996f-3ea6-11e5-8298-1b576ed4eb08","name":"New Port","type":"Port","params":{"position":[44000,12000],"radius1":700,"radius2":700,"height":100}},"97f29970-3ea6-11e5-8298-1b576ed4eb08":{"id":"97f29970-3ea6-11e5-8298-1b576ed4eb08","name":"New Port","type":"Port","params":{"position":[55000,12000],"radius1":700,"radius2":700,"height":100}},"97f29971-3ea6-11e5-8298-1b576ed4eb08":{"id":"97f29971-3ea6-11e5-8298-1b576ed4eb08","name":"New Port","type":"Port","params":{"position":[25000,21000],"radius1":700,"radius2":700,"height":100}},"97f29972-3ea6-11e5-8298-1b576ed4eb08":{"id":"97f29972-3ea6-11e5-8298-1b576ed4eb08","name":"New Port","type":"Port","params":{"position":[45000,21000],"radius1":700,"radius2":700,"height":100}},"a54e6620-3ea6-11e5-8298-1b576ed4eb08":{"id":"a54e6620-3ea6-11e5-8298-1b576ed4eb08","name":"New Channel","type":"Channel","params":{"start":[10000,20000],"end":[15000,12000],"width":400,"height":100}},"a63ff210-3ea6-11e5-8298-1b576ed4eb08":{"id":"a63ff210-3ea6-11e5-8298-1b576ed4eb08","name":"New Channel","type":"Channel","params":{"start":[55000,12000],"end":[60000,20000],"width":400,"height":100}},"a7efc4f0-3ea6-11e5-8298-1b576ed4eb08":{"id":"a7efc4f0-3ea6-11e5-8298-1b576ed4eb08","name":"New Port","type":"Port","params":{"position":[10000,20000],"radius1":700,"radius2":700,"height":100}},"a8879820-3ea6-11e5-8298-1b576ed4eb08":{"id":"a8879820-3ea6-11e5-8298-1b576ed4eb08","name":"New Port","type":"Port","params":{"position":[60000,20000],"radius1":700,"radius2":700,"height":100}}}}],"groups":[],"defaults":{}}',Mw='{"name":"My Other Device","params":{"width":135000,"length":85000},"layers":[{"name":"flow","color":"indigo","params":{"z_offset":0,"flip":false},"features":{"7d4dce00-4f92-11e7-b516-0963e7d642b6":{"id":"7d4dce00-4f92-11e7-b516-0963e7d642b6","name":"New Feature","type":"Channel","set":"Basic","params":{"start":[0,0],"end":[135000,0],"channelWidth":800,"height":100}},"802dbc70-4f92-11e7-b516-0963e7d642b6":{"id":"802dbc70-4f92-11e7-b516-0963e7d642b6","name":"New Feature","type":"Channel","set":"Basic","params":{"start":[135000,0],"end":[135000,85000],"channelWidth":800,"height":100}},"84122290-4f92-11e7-b516-0963e7d642b6":{"id":"84122290-4f92-11e7-b516-0963e7d642b6","name":"New Feature","type":"Channel","set":"Basic","params":{"start":[135000,85000],"end":[0,85000],"channelWidth":800,"height":100}},"8791ac60-4f92-11e7-b516-0963e7d642b6":{"id":"8791ac60-4f92-11e7-b516-0963e7d642b6","name":"New Feature","type":"Channel","set":"Basic","params":{"start":[0,85000],"end":[0,0],"channelWidth":800,"height":100}}}},{"name":"control","color":"red","params":{"z_offset":1200,"flip":true},"features":{"a937dec0-4f92-11e7-b516-0963e7d642b6":{"id":"a937dec0-4f92-11e7-b516-0963e7d642b6","name":"New Feature","type":"Channel","set":"Basic","params":{"start":[0,0],"end":[0,85000],"channelWidth":800,"height":100}},"ab87e940-4f92-11e7-b516-0963e7d642b6":{"id":"ab87e940-4f92-11e7-b516-0963e7d642b6","name":"New Feature","type":"Channel","set":"Basic","params":{"start":[0,85000],"end":[135000,85000],"channelWidth":800,"height":100}},"ad94f750-4f92-11e7-b516-0963e7d642b6":{"id":"ad94f750-4f92-11e7-b516-0963e7d642b6","name":"New Feature","type":"Channel","set":"Basic","params":{"start":[135000,85000],"end":[135000,0],"channelWidth":800,"height":100}},"af694220-4f92-11e7-b516-0963e7d642b6":{"id":"af694220-4f92-11e7-b516-0963e7d642b6","name":"New Feature","type":"Channel","set":"Basic","params":{"start":[135000,0],"end":[0,0],"channelWidth":800,"height":100}}}}],"groups":[]}',jw='{"name":"My Other Device","params":{"width":135000,"length":85000},"renderLayers":[{"id":"d51fc900-e923-11ec-baa7-bf96f82ad573","name":"RenderLayerFlow_1","modellayer":"4952d7a0-f16c-11eb-8c04-ff751cb31c4c","type":"FLOW","features":[],"color":"indigo"},{"id":"d51fc901-e923-11ec-baa7-bf96f82ad573","name":"RenderLayerControl_1","modellayer":"4952feb0-f16c-11eb-8c04-ff751cb31c4c","type":"CONTROL","features":[],"color":"red"},{"id":"d51fc902-e923-11ec-baa7-bf96f82ad573","name":"RenderLayerIntegration_1","modellayer":"4952feb1-f16c-11eb-8c04-ff751cb31c4c","type":"INTEGRATION","features":[],"color":"green"}],"layers":[{"id":"4952d7a0-f16c-11eb-8c04-ff751cb31c4c","name":"LayerFlow_1","type":"FLOW","group":"0","params":{"z_offset":0,"flip":false},"features":[]},{"id":"4952feb0-f16c-11eb-8c04-ff751cb31c4c","name":"LayerControl_1","type":"CONTROL","group":"0","params":{"z_offset":0,"flip":false},"features":[]},{"id":"4952feb1-f16c-11eb-8c04-ff751cb31c4c","name":"LayerIntegration_1","type":"INTEGRATION","group":"0","params":{"z_offset":0,"flip":false},"features":[]}],"groups":[],"components":[],"connections":[],"valves":[],"version":"1.2"}',Aw='{"name":"DAFD Template","params":{"width":70000,"length":70000},"components":[{"id":"e958b4d0-6155-11e9-89ad-d58be75aeb6f","name":"Port_in","entity":"PORT","params":{"position":[10000,35000],"portRadius":1998,"height":1100},"xspan":3996,"yspan":3996,"ports":[]},{"id":"eadf7be0-6155-11e9-89ad-d58be75aeb6f","name":"Port_out","entity":"PORT","params":{"position":[60000,35000],"portRadius":1998,"height":1100},"xspan":3996,"yspan":3996,"ports":[]},{"id":"ec125690-6155-11e9-89ad-d58be75aeb6f","name":"Port_oil1","entity":"PORT","params":{"position":[35075,10000],"portRadius":1998,"height":1100},"xspan":3996,"yspan":3996,"ports":[]},{"id":"f0839360-6155-11e9-89ad-d58be75aeb6f","name":"Port_oil2","entity":"PORT","params":{"position":[35075,60000],"portRadius":1998,"height":1100},"xspan":3996,"yspan":3996,"ports":[]},{"id":"b6d5c690-d628-11e9-9185-859b5727feb8","name":"DropletGen_1","entity":"NOZZLE DROPLET GENERATOR","params":{"position":[40000,35000],"orificeSize":75,"orificeLength":75,"oilInputWidth":150,"waterInputWidth":150,"outputWidth":150,"outputLength":5000,"height":75},"xspan":5225,"yspan":150,"ports":[{"x":75,"y":-75,"layer":"FLOW","label":"1"},{"x":5225,"y":0,"layer":"FLOW","label":"2"},{"x":75,"y":75,"layer":"FLOW","label":"3"},{"x":0,"y":0,"layer":"FLOW","label":"4"}]}],"connections":[],"features":[{"name":"flow","color":"indigo","params":{"z_offset":0,"flip":false},"features":{"e957f180-6155-11e9-89ad-d58be75aeb6f":{"id":"e957f180-6155-11e9-89ad-d58be75aeb6f","name":"New Feature","macro":"Port","set":"Basic","referenceID":"e958b4d0-6155-11e9-89ad-d58be75aeb6f","params":{"position":[10000,35000],"portRadius":1998,"height":1100},"dxfData":[],"type":"XY"},"eadf06b0-6155-11e9-89ad-d58be75aeb6f":{"id":"eadf06b0-6155-11e9-89ad-d58be75aeb6f","name":"New Feature","macro":"Port","set":"Basic","referenceID":"eadf7be0-6155-11e9-89ad-d58be75aeb6f","params":{"position":[60000,35000],"portRadius":1998,"height":1100},"dxfData":[],"type":"XY"},"ec119340-6155-11e9-89ad-d58be75aeb6f":{"id":"ec119340-6155-11e9-89ad-d58be75aeb6f","name":"New Feature","macro":"Port","set":"Basic","referenceID":"ec125690-6155-11e9-89ad-d58be75aeb6f","params":{"position":[35075,10000],"portRadius":1998,"height":1100},"dxfData":[],"type":"XY"},"f082f720-6155-11e9-89ad-d58be75aeb6f":{"id":"f082f720-6155-11e9-89ad-d58be75aeb6f","name":"New Feature","macro":"Port","set":"Basic","referenceID":"f0839360-6155-11e9-89ad-d58be75aeb6f","params":{"position":[35075,60000],"portRadius":1998,"height":1100},"dxfData":[],"type":"XY"},"1643a8b0-d3f2-11e9-ad52-c581dcc5e148":{"id":"1643a8b0-d3f2-11e9-ad52-c581dcc5e148","name":"Transition_3","macro":"Transition","set":"Basic","params":{"position":[10000,35000],"cw1":2000,"cw2":150,"length":10000,"rotation":270,"height":250},"dxfData":[],"type":"XY"},"2e07a4b0-d3f2-11e9-ad52-c581dcc5e148":{"id":"2e07a4b0-d3f2-11e9-ad52-c581dcc5e148","name":"Transition_4","macro":"Transition","set":"Basic","params":{"position":[60000,35000],"cw1":2000,"cw2":150,"length":10000,"rotation":90,"height":250},"dxfData":[],"type":"XY"},"313eb3d0-d3f2-11e9-ad52-c581dcc5e148":{"id":"313eb3d0-d3f2-11e9-ad52-c581dcc5e148","name":"Transition_5","macro":"Transition","set":"Basic","params":{"position":[35075,60000],"cw1":2000,"cw2":150,"length":10000,"rotation":180,"height":250},"dxfData":[],"type":"XY"},"336b57d0-d3f2-11e9-ad52-c581dcc5e148":{"id":"336b57d0-d3f2-11e9-ad52-c581dcc5e148","name":"Transition_6","macro":"Transition","set":"Basic","params":{"position":[35075,10000],"cw1":2000,"cw2":150,"length":10000,"height":250},"dxfData":[],"type":"XY"},"b6d50340-d628-11e9-9185-859b5727feb8":{"id":"b6d50340-d628-11e9-9185-859b5727feb8","name":"New Feature","macro":"DropletGen","set":"Basic","referenceID":"b6d5c690-d628-11e9-9185-859b5727feb8","params":{"position":[40000,35000],"orificeSize":75,"orificeLength":75,"oilInputWidth":150,"waterInputWidth":150,"outputWidth":150,"outputLength":5000,"height":75},"dxfData":[],"type":"XY"},"e1a50cd0-f506-11e9-b6c5-c5f0545f0b4a":{"id":"e1a50cd0-f506-11e9-b6c5-c5f0545f0b4a","name":"e1a50cd0-f506-11e9-b6c5-c5f0545f0b4a","macro":"EDGE","set":"Basic","dxfData":[],"type":"EDGE"},"48225b40-f50a-11e9-a170-c3e417364f96":{"id":"48225b40-f50a-11e9-a170-c3e417364f96","name":"48225b40-f50a-11e9-a170-c3e417364f96","macro":"EDGE","set":"Basic","dxfData":[],"type":"EDGE"}}},{"name":"control","color":"red","params":{"z_offset":1200,"flip":true},"features":{"e1a50cd0-f506-11e9-b6c5-c5f0545f0b4a":{"id":"e1a50cd0-f506-11e9-b6c5-c5f0545f0b4a","name":"e1a50cd0-f506-11e9-b6c5-c5f0545f0b4a","macro":"EDGE","set":"Basic","dxfData":[],"type":"EDGE"},"48225b40-f50a-11e9-a170-c3e417364f96":{"id":"48225b40-f50a-11e9-a170-c3e417364f96","name":"48225b40-f50a-11e9-a170-c3e417364f96","macro":"EDGE","set":"Basic","dxfData":[],"type":"EDGE"}}},{"name":"cells","color":"indigo","params":{"z_offset":2000,"flip":false},"features":{"e1a50cd0-f506-11e9-b6c5-c5f0545f0b4a":{"id":"e1a50cd0-f506-11e9-b6c5-c5f0545f0b4a","name":"e1a50cd0-f506-11e9-b6c5-c5f0545f0b4a","macro":"EDGE","set":"Basic","dxfData":[],"type":"EDGE"},"48225b40-f50a-11e9-a170-c3e417364f96":{"id":"48225b40-f50a-11e9-a170-c3e417364f96","name":"48225b40-f50a-11e9-a170-c3e417364f96","macro":"EDGE","set":"Basic","dxfData":[],"type":"EDGE"}}}],"version":"1.2","groups":[],"customComponents":{}}',Vw={example1:Mw,example2:jw,example3:Iw},Bw=Vw,Gw=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",[n("v-tooltip",{attrs:{left:""},scopedSlots:e._u([{key:"activator",fn:function(t){var r=t.on,o=t.attrs;return[n("v-btn",e._g(e._b({staticClass:"pink white--text",attrs:{id:"grid-button",fab:""},on:{click:function(t){return e.showProperties()}},nativeOn:{mouseenter:function(t){e.hover=!0},mouseleave:function(t){e.hover=!1}}},"v-btn",o,!1),r),[n("span",{staticClass:"material-icons"},[e._v("grid_on")])])]}}])},[n("span",[e._v("Grid Settings")])]),n("v-card",{directives:[{name:"show",rawName:"v-show",value:e.activated,expression:"activated"}],attrs:{id:"resolution-toolbar"}},[n("v-card-text",[n("v-switch",{attrs:{color:"#304FFE","hide-details":""},on:{change:e.clickedGrid},scopedSlots:e._u([{key:"label",fn:function(){return[e._v("Enable Automatic Grid")]},proxy:!0}]),model:{value:e.isAdaptiveGridEnabled,callback:function(t){e.isAdaptiveGridEnabled=t},expression:"isAdaptiveGridEnabled"}}),n("v-switch",{attrs:{color:"#304FFE"},on:{change:e.clickedSnap},scopedSlots:e._u([{key:"label",fn:function(){return[e._v("Render Snap Points")]},proxy:!0}]),model:{value:e.renderSnap,callback:function(t){e.renderSnap=t},expression:"renderSnap"}}),n("br"),n("div",{ref:"gridslider",attrs:{disabled:e.isAdaptiveGridEnabled}})],1)],1),n("div",{attrs:{id:"bottom-info-bar"}},[e._v("Grid Size: "+e._s(e.gridSizeValue)+" μm")])],1)},zw=[],Uw=(n("0c4f"),n("0f2b")),Kw=n.n(Uw),Hw=n("5070"),Yw=n.n(Hw),Xw={name:"ResolutionToolbar",components:{},data:function(){return{suffix:Yw()({suffix:"μm"}),activated:!1,hover:!1,isAdaptiveGridEnabled:!0,renderSnap:!0,isUserGeneratedEvent:!1,ignoreUpdate:!1,gridSizeValue:0}},computed:{directGridSpacingRead:function(){return null===zh.viewManager?0:zh.viewManager.getGridSize()}},mounted:function(){var e=this;Kw.a.create(this.$refs.gridslider,{start:[500],connect:"lower",range:{min:[1,1],"10%":[10,10],"30%":[100,100],"90%":[1e3,1e3],max:[5e3]},pips:{mode:"range",density:5,format:Yw()({suffix:"μm"})},tooltips:[!0]}),setTimeout((function(){zh.currentGrid.spacing,e.$refs.gridslider.noUiSlider.on("change",(function(t){var n=parseFloat(t[0]);console.log("grid size: "+n),e.ignoreUpdate||zh.viewManager.updateGridSpacing(n)}));var t=zh.viewManager.getGridSize();e.ignoreUpdate=!0,e.$refs.gridslider.noUiSlider.set(t),e.ignoreUpdate=!1,e.gridSizeValue=t,Wd.get().on(Wd.UPDATE_GRID_SIZE,(function(){var t=zh.viewManager.getGridSize();e.gridSizeValue=t,e.ignoreUpdate=!0,e.$refs.gridslider.noUiSlider.set(t),e.ignoreUpdate=!1}))}),100)},methods:{showProperties:function(){this.activated=!this.activated,console.log("grid clicked")},clickedGrid:function(){console.log(this.isAdaptiveGridEnabled),this.isAdaptiveGridEnabled?zh.currentGrid.enableAdaptiveGrid():zh.currentGrid.disableAdaptiveGrid()},clickedSnap:function(){this.renderSnap?zh.viewManager.view.enableSnapRender():zh.viewManager.view.disableSnapRender()}}},qw=Xw,Jw=(n("2480"),n("2877")),$w=n("6544"),Zw=n.n($w),Qw=n("8336"),eb=n("b0af"),tb=n("99d9"),nb=n("b73d"),rb=n("3a2f"),ob=Object(Jw["a"])(qw,Gw,zw,!1,null,"17cb0ead",null),ib=ob.exports;Zw()(ob,{VBtn:Qw["a"],VCard:eb["a"],VCardText:tb["b"],VSwitch:nb["a"],VTooltip:rb["a"]});var ab=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"zoomsliderbase"},[n("div",{ref:"zoomslider",staticClass:"zslidermain",attrs:{height:"300px"}})])},lb=[],sb=n("f528"),ub=n.n(sb),cb={name:"ZoomSlider",components:{},data:function(){return{zoomOptimal:[.1],ignoreUpdate:!1,currentGridSpacing:500,currentZoom:-3.5}},mounted:function(){var e=this;ub.a.create(this.$refs.zoomslider,{start:40,orientation:"vertical",connect:[!1,!0],range:{min:-3.61,max:.6545}}),this.$refs.zoomslider.noUiSlider.updateOptions({range:{min:-3.61,max:.6545}},!1);var t=0;setTimeout((function(){e.$refs.zoomslider.noUiSlider.on("update",(function(t){var n=parseFloat(t[0]);e.ignoreUpdate||e.updateViewManagerZoom(n)})),t=Math.log10(zh.viewManager.view.computeOptimalZoom()),e.$refs.zoomslider.noUiSlider.set(t)}),100),Wd.get().on(Wd.UPDATE_ZOOM,(function(){var t=e.convertZoomtoLinearScale(zh.viewManager.view.getZoom());e.ignoreUpdate=!0,e.$refs.zoomslider.noUiSlider.set(t),e.ignoreUpdate=!1}))},methods:{convertLinearToZoomScale:function(e){return Math.pow(10,e)},updateViewManagerZoom:function(e){zh.viewManager.setZoom(this.convertLinearToZoomScale(e))},convertZoomtoLinearScale:function(e){return Math.log10(e)}}},hb=cb,fb=(n("feac"),Object(Jw["a"])(hb,ab,lb,!1,null,"1a7b3dea",null)),db=fb.exports,pb=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("v-card",{directives:[{name:"show",rawName:"v-show",value:e.activeMenu,expression:"activeMenu"}],ref:"RightClickMenu",style:{width:550,height:100,top:e.marginTop+"px",left:e.marginLeft+"px"},attrs:{scrollable:""}},[n("div",[n("thead",{directives:[{name:"show",rawName:"v-show",value:e.showRename,expression:"showRename"}]},[n("v-col",[n("v-row",{attrs:{"align-start":""}},[n("v-text-field",{attrs:{label:"Name",type:"input"},model:{value:e.componentName,callback:function(t){e.componentName=t},expression:"componentName"}}),n("v-btn",{attrs:{"x-small":"",depressed:""},on:{click:e.cancelRename}},[n("span",{staticClass:"material-icons"},[e._v("close")])]),n("v-btn",{attrs:{"x-small":"",depressed:""},on:{click:e.saveName}},[n("span",{staticClass:"material-icons"},[e._v("check")])])],1)],1)],1),n("v-row",{attrs:{dense:""}},[n("div",{staticClass:"buttonClass",attrs:{id:"buttonClass"}},[n("v-btn",{attrs:{id:"context_button_copy",color:"white indigo--text",depressed:""},on:{click:function(t){return e.copyButton()}}},[n("span",{staticClass:"material-icons"},[e._v("file_copy")])]),n("v-btn",{attrs:{id:"context_button_delete",color:"white indigo--text",depressed:""},on:{click:function(t){return e.deleteButton()}}},[n("span",{staticClass:"material-icons"},[e._v("delete")])]),n("MoveDialog",{attrs:{component:e.currentComponent},on:{close:function(t){e.activeMenu=!1}}}),n("v-btn",{attrs:{id:"context_button_revert",color:"white indigo--text",depressed:""},on:{click:function(t){return e.revertToDefaults()}}},[n("span",{staticClass:"material-icons"},[e._v("settings_backup_restore")])]),n("ChangeAllDialog",{attrs:{component:e.currentComponent},on:{close:function(t){e.activeMenu=!1}}}),n("v-btn",{attrs:{id:"context_button_showRename",color:"white indigo--text",depressed:""},on:{click:function(t){e.showRename=!0}}},[n("span",{staticClass:"material-icons"},[e._v("title")])]),n("GenerateArrayDialog",{attrs:{component:e.currentComponent},on:{close:function(t){e.activeMenu=!1}}})],1)]),n("v-row",[n("v-card-text",[n("PropertyBlock",{attrs:{title:e.mint,spec:e.spec},on:{update:e.updateParameter}})],1)],1)],1)])},vb=[],gb=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("v-dialog",{attrs:{"content-class":"draggable-dialog topleft-dialog","hide-overlay":"",persistent:"","no-click-animation":"",width:"500"},scopedSlots:e._u([{key:"activator",fn:function(t){var r=t.on,o=t.attrs;return[n("v-btn",e._g(e._b({attrs:{id:"context_button_move",color:"white indigo--text",depressed:""}},"v-btn",o,!1),r),[n("span",{staticClass:"material-icons"},[e._v("open_with")])])]}}]),model:{value:e.dialog,callback:function(t){e.dialog=t},expression:"dialog"}},[n("v-card",[n("v-card-title",{staticClass:"text-h5 lighten-2"},[e._v(" Move Component: ")]),n("v-card-text",[n("v-row",[n("v-col",[n("v-row",[n("v-col",{attrs:{id:"left-col",cols:"3"}},[n("v-row",[n("v-card-text",[e._v(e._s(e.topLeft.x)+", "+e._s(e.topLeft.y))])],1),n("v-row",[n("v-card-text",{staticClass:"bottom-xy"},[e._v(e._s(e.bottomLeft.x)+", "+e._s(e.bottomLeft.y))])],1)],1),n("v-col",{attrs:{id:"box"}}),n("v-col",{attrs:{cols:"3"}},[n("v-row",[n("v-card-text",[e._v(e._s(e.topRight.x)+", "+e._s(e.topRight.y))])],1),n("v-row",[n("v-card-text",{staticClass:"bottom-xy"},[e._v(e._s(e.bottomRight.x)+", "+e._s(e.bottomRight.y))])],1)],1)],1)],1),n("v-col",{attrs:{id:"right-col"}},[n("tr",[n("td",[n("v-card-text",[e._v("X (mm):")])],1),n("td",{attrs:{width:"125px"}},[n("v-text-field",{attrs:{placeholder:"0",step:1,type:"number"},on:{change:e.updateComponent},model:{value:e.posX,callback:function(t){e.posX=t},expression:"posX"}})],1)]),n("tr",[n("td",[n("v-card-text",[e._v("Y (mm):")])],1),n("td",{attrs:{width:"125px"}},[n("v-text-field",{attrs:{placeholder:"0",step:1,type:"number"},on:{change:e.updateComponent},model:{value:e.posY,callback:function(t){e.posY=t},expression:"posY"}})],1)])])],1)],1),n("v-divider"),n("v-card-actions",[n("v-spacer"),n("v-btn",{staticClass:"white--text",attrs:{color:"green"},on:{click:function(t){e.dialog=!1}}},[e._v(" Save ")]),n("v-btn",{staticClass:"white--text ml-9",attrs:{color:"red"},on:{click:e.cancelMove}},[e._v(" Cancel ")])],1)],1)],1)},yb=[],mb=(n("5363"),{name:"MoveDialog",props:{component:{type:Pf,required:!0,default:null}},data:function(){return{dialog:!1,activated:!1,callbacks:{},posX:0,posY:0}},computed:{buttonClasses:function(){return[this.activated?this.activatedColor:"white",this.activated?this.activatedTextColor:"blue--text","ml-4","mb-2","btn"]},topLeft:function(){return{x:0,y:0}},topRight:function(){return{x:0,y:0}},bottomLeft:function(){return{x:0,y:0}},bottomRight:function(){return{x:0,y:0}}},watch:{dialog:function(e){e?(this.$emit("close"),zh.viewManager.activateTool("MoveTool"),zh.viewManager.tools.MoveTool.activate(this.component,this.toolCallback)):zh.viewManager.tools.MoveTool.deactivate()}},mounted:function(){var e=this;Wd.get().on(Wd.NAVBAR_SCROLL_EVENT,this.setDrawerPosition),l["default"].set(this.callbacks,"close",(function(t){t&&t(),e.activated=!1})),function(){var e={};document.addEventListener("mousedown",(function(t){var n=t.target.closest(".draggable-dialog");0===t.button&&null!==n&&t.target.classList.contains("v-card__title")&&(e.el=n,e.mouseStartX=t.clientX,e.mouseStartY=t.clientY,e.elStartX=e.el.getBoundingClientRect().left,e.elStartY=e.el.getBoundingClientRect().top,e.el.style.position="fixed",e.el.style.margin=0,e.oldTransition=e.el.style.transition,e.el.style.transition="none")})),document.addEventListener("mousemove",(function(t){void 0!==e.el&&(e.el.style.left=Math.min(Math.max(e.elStartX+t.clientX-e.mouseStartX,0),window.innerWidth-e.el.getBoundingClientRect().width)+"px",e.el.style.top=Math.min(Math.max(e.elStartY+t.clientY-e.mouseStartY,0),window.innerHeight-e.el.getBoundingClientRect().height)+"px")})),document.addEventListener("mouseup",(function(){void 0!==e.el&&(e.el.style.transition=e.oldTransition,e.el=void 0)})),setInterval((function(){var e=document.querySelector(".draggable-dialog");null!==e&&(e.style.left=Math.min(parseInt(e.style.left),window.innerWidth-e.getBoundingClientRect().width)+"px",e.style.top=Math.min(parseInt(e.style.top),window.innerHeight-e.getBoundingClientRect().height)+"px")}),100)}()},methods:{cancelMove:function(){zh.viewManager.tools.MoveTool.revertToOriginalPosition(),this.dialog=!1},toolCallback:function(e,t){this.posX=e,this.posY=t},handleScroll:function(){this.setDrawerPosition()},setDrawerPosition:function(){if(this.activated){var e=this.$refs.activator.$el.getBoundingClientRect();this.$refs.drawer.style.top=e.bottom-e.height+"px"}},onSave:function(){console.log("Saved data for Move")},updateComponent:function(){this.component.updateComponentPosition([parseInt(this.posX),parseInt(this.posY)])}}}),wb=mb,bb=(n("6d1a"),n("62ad")),_b=n("169a"),Pb=n("ce7e"),Cb=n("0fd9"),Ob=n("2fa4"),Sb=n("8654"),Rb=Object(Jw["a"])(wb,gb,yb,!1,null,"151188cb",null),Lb=Rb.exports;Zw()(Rb,{VBtn:Qw["a"],VCard:eb["a"],VCardActions:tb["a"],VCardText:tb["b"],VCardTitle:tb["c"],VCol:bb["a"],VDialog:_b["a"],VDivider:Pb["a"],VRow:Cb["a"],VSpacer:Ob["a"],VTextField:Sb["a"]});var kb=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("v-dialog",{attrs:{width:"500"},scopedSlots:e._u([{key:"activator",fn:function(t){var r=t.on,o=t.attrs;return[n("v-btn",e._g(e._b({attrs:{id:"context_button_copytoall",color:"white indigo--text",depressed:""}},"v-btn",o,!1),r),[n("span",{staticClass:"material-icons"},[e._v("select_all")])])]}}]),model:{value:e.dialog,callback:function(t){e.dialog=t},expression:"dialog"}},[n("v-card",[n("v-card-title",{staticClass:"text-h5 lighten-2"},[e._v(" Change All Components: ")]),n("v-card-text"),n("table",[n("tr",[n("th",{staticClass:"font-weight-bold pl-10 pt-4 pb-2"},[n("input",{directives:[{name:"model",rawName:"v-model",value:e.selectAll,expression:"selectAll"}],attrs:{type:"checkbox"},domProps:{checked:Array.isArray(e.selectAll)?e._i(e.selectAll,null)>-1:e.selectAll},on:{change:function(t){var n=e.selectAll,r=t.target,o=!!r.checked;if(Array.isArray(n)){var i=null,a=e._i(n,i);r.checked?a<0&&(e.selectAll=n.concat([i])):a>-1&&(e.selectAll=n.slice(0,a).concat(n.slice(a+1)))}else e.selectAll=o}}}),n("span",{staticClass:"pl-1"},[e._v("Select")])]),n("th",{staticClass:"font-weight-bold pl-15 pt-4 pb-2"},[e._v("Name")])]),e._l(e.components,(function(t){return n("tr",{key:t.id},[n("td",{staticClass:"pl-15 pb-2"},[n("input",{directives:[{name:"model",rawName:"v-model",value:e.selected,expression:"selected"}],attrs:{type:"checkbox"},domProps:{value:t.id,checked:Array.isArray(e.selected)?e._i(e.selected,t.id)>-1:e.selected},on:{change:function(n){var r=e.selected,o=n.target,i=!!o.checked;if(Array.isArray(r)){var a=t.id,l=e._i(r,a);o.checked?l<0&&(e.selected=r.concat([a])):l>-1&&(e.selected=r.slice(0,l).concat(r.slice(l+1)))}else e.selected=i}}})]),n("td",{staticClass:"pl-15 pb-2"},[e._v(e._s(t.name))])])}))],2),n("v-divider"),n("v-card-actions",[n("v-spacer"),n("v-btn",{staticClass:"white--text",attrs:{color:"green"},on:{click:e.onSave}},[e._v(" Change ")]),n("v-btn",{staticClass:"white--text ml-9",attrs:{color:"red"},on:{click:function(t){e.dialog=!1}}},[e._v(" Cancel ")])],1)],1)],1)},Db=[];function Tb(e,t){var n="undefined"!==typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!n){if(Array.isArray(e)||(n=Fb(e))||t&&e&&"number"===typeof e.length){n&&(e=n);var r=0,o=function(){};return{s:o,n:function(){return r>=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,a=!0,l=!1;return{s:function(){n=n.call(e)},n:function(){var e=n.next();return a=e.done,e},e:function(e){l=!0,i=e},f:function(){try{a||null==n.return||n.return()}finally{if(l)throw i}}}}function Fb(e,t){if(e){if("string"===typeof e)return Eb(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?Eb(e,t):void 0}}function Eb(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);nwindow.innerWidth/2?this.marginLeft=e.clientX-800:this.marginLeft=e.clientX-180,window.innerHeight/1.2>=e.clientY&&e.clientY>=window.innerHeight/6?this.marginTop=0:e.clientY+0>window.innerHeight/2?this.marginTop=e.clientY-750:this.marginTop=e.clientY+0;var r=this.computeSpec(t.mint,t.params);this.mint=t.mint,console.log(r),this.spec=r},onSave:function(){var e=this.getComponentName();this.$refs.input.value=e,console.log("Saved data for showRename")},revertToDefaults:function(){this.revertToDefaultParams(this.$refs.table,this.typestring,this.__setString)},deleteButton:function(){zh.viewManager.view.deleteSelectedFeatures()},copyButton:function(){zh.viewManager.initiateCopy()},copyToAllButton:function(){this.activeCopy=!this.activeCopy,console.log("Change all the component parameters")},generateArrayButton:function(){zh.viewManager.activateTool("GenerateArrayTool");var e=zh.currentDevice.getComponentForFeatureID(this.featureRef.getID());zh.viewManager.tools.GenerateArrayTool.activate(e)},handleScroll:function(){this.setDrawerPosition()},setDrawerPosition:function(){if(this.activated){var e=this.$refs.activator.$el.getBoundingClientRect();this.$refs.drawer.style.top=e.bottom-e.height+"px"}},saveName:function(){this.currentComponent.name=this.componentName,this.showRename=!1},closeDialog:function(){this.activeMenu=!1},cancelRename:function(){this.showRename=!1,this.componentName=this.currentComponent.name}}},Zb=$b,Qb=(n("6c33"),Object(Jw["a"])(Zb,pb,vb,!1,null,"94aacf7a",null)),e_=Qb.exports;Zw()(Qb,{VBtn:Qw["a"],VCard:eb["a"],VCardText:tb["b"],VCol:bb["a"],VRow:Cb["a"],VTextField:Sb["a"]});var t_=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("v-card",{directives:[{name:"show",rawName:"v-show",value:e.activeMenu,expression:"activeMenu"}],ref:"RightClickMenu",style:{width:550,height:100,top:e.marginTop+"px",left:e.marginLeft+"px"},attrs:{scrollable:""}},[n("div",[n("thead",{directives:[{name:"show",rawName:"v-show",value:e.showRename,expression:"showRename"}]},[n("v-col",[n("v-row",{attrs:{"align-start":""}},[n("v-text-field",{attrs:{label:"Name",type:"input"},model:{value:e.connectionName,callback:function(t){e.connectionName=t},expression:"connectionName"}}),n("v-btn",{attrs:{"x-small":"",depressed:""},on:{click:e.cancelRename}},[n("span",{staticClass:"material-icons"},[e._v("close")])]),n("v-btn",{attrs:{"x-small":"",depressed:""},on:{click:e.saveName}},[n("span",{staticClass:"material-icons"},[e._v("check")])])],1)],1)],1),n("v-row",{attrs:{dense:""}},[n("div",{staticClass:"buttonClass",attrs:{id:"buttonClass"}},[n("v-btn",{attrs:{id:"context_button_delete",color:"white indigo--text",depressed:""},on:{click:function(t){return e.deleteButton()}}},[n("span",{staticClass:"material-icons"},[e._v("delete")])]),n("v-btn",{attrs:{id:"context_button_showRename",color:"white indigo--text",depressed:""},on:{click:function(t){e.showRename=!0}}},[n("span",{staticClass:"material-icons"},[e._v("title")])])],1)]),n("v-row",[n("v-card-text",[n("PropertyBlock",{attrs:{title:e.mint,spec:e.spec},on:{update:e.updateParameter}})],1)],1)],1)])},n_=[],r_={name:"ConnectionContextMenu",components:{PropertyBlock:Ub},data:function(){return{mint:"CHANNEL",spec:[{min:0,max:110,units:"",value:0}],activeMenu:!1,activeChange:!1,activeMove:!1,activeCopy:!1,showRename:!1,connectionName:"",featureRef:null,typeString:"",marginLeft:500,marginTop:100,currentConnection:new Gf("",new zc({},new Map,new Map),"","",new Yc({},zh.currentDevice))}},mounted:function(){var e=this;Wd.get().on(Wd.CLOSE_ALL_WINDOWS,(function(){e.activeMenu=!1})),Wd.get().on(Wd.DBL_CLICK_CONNECTION,this.activateMenu)},methods:{updateParameter:function(e,t){this.currentConnection.updateParameter(t,e)},computeSpec:function(e,t){var n=[],r=Tc.getDefinitionForMINT(e);for(var o in t.heritable){var i=t.heritable[o],a={min:r.minimum[i],max:r.maximum[i],value:t.getValue(i),units:r.units[i],steps:(r.maximum[i]-r.minimum[i])/10,name:i};n.push(a)}return console.log("Spec: ",n),n},activateMenu:function(e,t){console.log("clienwidth/height",this.$el,this.$el.clientWidth,this.$el.clientHeight),this.currentConnection=t,this.featureRef=t,this.typeString="CHANNEL";var n=t.name;this.connectionName=n,console.log(e,t),this.activeMenu=!this.activeMenu,e.clientX-150>window.innerWidth/2?this.marginLeft=e.clientX-800:this.marginLeft=e.clientX-180,window.innerHeight/1.2>=e.clientY&&e.clientY>=window.innerHeight/6?this.marginTop=0:e.clientY+0>window.innerHeight/2?this.marginTop=e.clientY-750:this.marginTop=e.clientY+0;var r=this.computeSpec("CHANNEL",t.params);console.log(r),this.spec=r},onSave:function(){var e=this.getconnectionName();this.$refs.input.value=e,console.log("Saved data for showRename")},revertToDefaults:function(){this.revertToDefaultParams(this.$refs.table,this.typestring,this.__setString)},revertToDefaultParams:function(e,t,n){var r=Tc.getDefinition(t),o=r.heritable,i=r.defaults;for(var a in o)zh.viewManager.adjustParams(t,n,a,i[a])},deleteButton:function(){zh.viewManager.view.deleteSelectedFeatures()},copyButton:function(){zh.viewManager.initiateCopy()},copyToAllButton:function(){this.activeCopy=!this.activeCopy,console.log("Change all the connection parameters")},generateArrayButton:function(){zh.viewManager.activateTool("GenerateArrayTool");var e=zh.currentDevice.getConnectionForFeatureID(this.featureRef.getID());zh.viewManager.tools.GenerateArrayTool.activate(e)},handleScroll:function(){this.setDrawerPosition()},setDrawerPosition:function(){if(this.activated){var e=this.$refs.activator.$el.getBoundingClientRect();this.$refs.drawer.style.top=e.bottom-e.height+"px"}},saveName:function(){this.currentConnection.name=this.connectionName,this.showRename=!1},closeDialog:function(){this.activeMenu=!1},cancelRename:function(){this.showRename=!1,this.connectionName=this.currentConnection.name}}},o_=r_,i_=(n("c3ec"),Object(Jw["a"])(o_,t_,n_,!1,null,"7fd25946",null)),a_=i_.exports;Zw()(i_,{VBtn:Qw["a"],VCard:eb["a"],VCardText:tb["b"],VCol:bb["a"],VRow:Cb["a"],VTextField:Sb["a"]});var l_={components:{ResolutionToolbar:ib,ComponentContextMenu:e_,ConnectionContextMenu:a_,ZoomSlider:db},data:function(){return{}},computed:{},mounted:function(){var e=new Nw;zh.viewManager=e,e.loadDeviceFromJSON(JSON.parse(r.UpdatedExample)),e.updateGrid(),e.refresh(),window.dev=zh.currentDevice,window.Registry=zh,window.view=zh.viewManager.view,zh.viewManager.setupToolBars(),this.setupDragAndDropOnCanvas()},methods:{setupDragAndDropOnCanvas:function(){function e(e,t){var n=function(t){t.stopPropagation(),t.preventDefault(),e.classList.add("dropping")},r=function(e){e.stopPropagation(),e.preventDefault()},o=function(e){e.stopPropagation(),e.preventDefault()},i=function(n){n.stopPropagation(),n.preventDefault(),e.classList.remove("dropping"),t(n.dataTransfer.files,n)};e.addEventListener("dragenter",n,!1),e.addEventListener("dragover",r,!1),e.addEventListener("dragleave",o,!1),e.addEventListener("drop",i,!1)}e(this.$refs.rendingcanvas,(function(e){var t=e[0],n=new FileReader;n.onloadend=function(e){var t=this.result,n=JSON.parse(t);zh.viewManager.loadDeviceFromJSON(n)};try{n.readAsText(t)}catch(r){console.log("unable to load JSON: "+t)}}))}}},s_=l_,u_=(n("4d3d"),Object(Jw["a"])(s_,c,h,!1,null,"c5eef416",null)),c_=u_.exports,h_=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("v-row",[n("v-col",[n("v-navigation-drawer",{staticClass:"pt-4",attrs:{app:"",permanent:"",color:"grey lighten-3"}},[n("div",{staticClass:"d-flex flex-column mx-2"},[n("v-img",{staticClass:"mx-auto",staticStyle:{width:"90%"},attrs:{src:"img/logo.png",alt:"3DuF Logo"}}),n("v-divider",{staticClass:"mb-1"}),n("IntroHelpDialog"),n("v-divider"),n("EditDeviceDialog"),n("EditBorderDialog"),n("InsertTextDialog"),n("ImportDXFDialog"),n("v-divider"),n("LayerToolbar"),n("ComponentToolbar"),n("ManufacturingPanel"),n("v-divider"),n("HelpDialog"),n("v-divider"),n("br")],1)])],1),n("v-col",[n("div",[n("Visualiser")],1)])],1)},f_=[],d_=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("v-dialog",{attrs:{persistent:"","max-width":"400"},scopedSlots:e._u([{key:"activator",fn:function(t){var r=t.on,o=t.attrs;return[n("v-btn",e._g(e._b({attrs:{text:"",color:"pink darken-1"}},"v-btn",o,!1),r),[e._v(" About/Help ")])]}}]),model:{value:e.dialog,callback:function(t){e.dialog=t},expression:"dialog"}},[n("v-card",[n("v-card-title",{staticClass:"headline"},[e._v(" 3DuF v1.1 ")]),n("v-card-text",[n("img",{attrs:{src:"img/cidar_logo.png",width:"100%"}}),e._v(" 3DuF is microfluidic design environment developed by "),n("a",{attrs:{href:"http://cidarlab.org",target:"_blank",rel:"noopener noreferrer"}},[e._v("CIDAR")]),e._v(". For any help or queries, please send an email to "),n("a",{attrs:{href:"mailto: 3dufhelp@gmail.com"}},[e._v("3dufhelp@gmail.com")]),e._v(". Source code, issue tracking and feature requests are available at "),n("a",{attrs:{href:"https://github.com/CIDARLAB/3DuF/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Github")]),e._v(". "),n("hr"),e._v(" Developed by: Aaron Heuckroth, Joshua Lippai and Radhakrishna Sanka. "),n("hr"),e._v(" Error Tracking powered by "),n("a",{attrs:{href:"https://trackjs.com"}},[e._v("https://trackjs.com")]),e._v(". ")]),n("v-card-actions",[n("v-spacer"),n("v-btn",{attrs:{color:"green darken-1",text:""},on:{click:function(t){e.dialog=!1}}},[e._v(" Close ")])],1)],1)],1)},p_=[],v_={data:function(){return{dialog:!1}}},g_=v_,y_=(n("3833"),Object(Jw["a"])(g_,d_,p_,!1,null,"20543ec0",null)),m_=y_.exports;Zw()(y_,{VBtn:Qw["a"],VCard:eb["a"],VCardActions:tb["a"],VCardText:tb["b"],VCardTitle:tb["c"],VDialog:_b["a"],VSpacer:Ob["a"]});var w_=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("v-dialog",{attrs:{persistent:"","max-width":"600"},scopedSlots:e._u([{key:"activator",fn:function(t){var r=t.on,o=t.attrs;return[n("v-btn",e._g(e._b({attrs:{text:"",color:"pink darken-1"}},"v-btn",o,!1),r),[e._v(" Getting Started ")])]}}]),model:{value:e.dialog,callback:function(t){e.dialog=t},expression:"dialog"}},[n("v-card",[n("v-card-title",{staticClass:"headline"},[e._v(" Getting Started ")]),n("v-card-text",[n("h5",[e._v("Academic Publications:")]),n("p",[e._v(" Sanka, Radhakrishna, Joshua Lippai, Dinithi Samarasekera, Sarah Nemsick, and Douglas Densmore. "),n("br"),e._v("“3DμF - Interactive Design Environment for Continuous Flow Microfluidic Devices.” "),n("br"),e._v("Scientific Reports 9, no. 1 (December 2019). ")]),n("a",{attrs:{href:"https://doi.org/10.1038/s41598-019-45623-z"}},[e._v("https://doi.org/10.1038/s41598-019-45623-z")]),n("h5",[e._v("Videos")]),n("table",[n("tr",[n("iframe",{attrs:{width:"355",height:"200",src:"https://www.youtube.com/embed/05nU8eQ73U8",frameborder:"0",allow:"accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture",allowfullscreen:""}})]),n("tr",[n("td",{staticStyle:{"text-align":"center"}},[e._v("Introduction")])]),n("tr",[n("iframe",{attrs:{width:"355",height:"200",src:"https://www.youtube.com/embed/YOrnnZjma28",frameborder:"0",allow:"accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture",allowfullscreen:""}})]),n("tr",[n("td",{staticStyle:{"text-align":"center"}},[e._v("Long Tutorial")])])]),n("br"),n("p",[n("b",[e._v("Send in comments, suggestions and issues to")]),n("a",{attrs:{href:"mailto: 3dufhelp@gmail.com"}},[e._v("3dufhelp@gmail.com")]),e._v(". ")]),n("h5",[e._v("Designs From Literature")]),e._v(" Check the various designs from microfluidic literature recreated in 3DµF can be found "),n("a",{attrs:{href:"https://cidarlab.github.io/3DuF-Paper-Designs/",target:"_blank",rel:"noopener noreferrer"}},[e._v("here")]),e._v(". "),n("h5",[e._v("Usage")]),n("table",{staticClass:"tg"},[n("tr",[n("td",{staticClass:"tg-yw4l"},[n("pre",[e._v("del")])]),n("td",{staticClass:"tg-yw4l"},[e._v("- Delete Feature")])]),n("tr",[n("td",{staticClass:"tg-yw4l"},[n("pre",[e._v("F")])]),n("td",{staticClass:"tg-yw4l"},[e._v("- Reset Canvas")])]),n("tr",[n("td",{staticClass:"tg-yw4l"},[n("pre",[e._v("Esc")])]),n("td",{staticClass:"tg-yw4l"},[e._v("- Activate Select Tool/ Deselect Selected Components")])]),n("tr",[n("td",{staticClass:"tg-yw4l"},[n("pre",[e._v("ctrl+C , ctrl+V")])]),n("td",{staticClass:"tg-yw4l"},[e._v("- Activate Component Copy Mode")])]),n("tr",[n("td",{staticClass:"tg-yw4l"},[n("pre",[e._v("ctrl+Z")])]),n("td",{staticClass:"tg-yw4l"},[e._v("- Undo Last Edit")])]),n("tr",[n("td",{staticClass:"tg-yw4l"},[n("pre",[e._v("ctrl+A")])]),n("td",{staticClass:"tg-yw4l"},[e._v("- Select All")])]),n("tr",[n("td",{staticClass:"tg-yw4l"},[n("pre",[e._v("ctrl+S")])]),n("td",{staticClass:"tg-yw4l"},[e._v("- Save JSON file")])]),n("tr",[n("td",{staticClass:"tg-yw4l"},[n("pre",[e._v("left click")])]),n("td",{staticClass:"tg-yw4l"},[e._v("- Place Feature")])]),n("tr",[n("td",{staticClass:"tg-yw4l"},[n("pre",[e._v("right click")])]),n("td",{staticClass:"tg-yw4l"},[e._v("- Select Feature")])]),n("tr",[n("td",{staticClass:"tg-yw4l"},[n("pre",[e._v("mouse scroll")])]),n("td",{staticClass:"tg-yw4l"},[e._v("- Zoom")])]),n("tr",[n("td",{staticClass:"tg-yw4l"},[n("pre",[e._v("arrow keys")])]),n("td",{staticClass:"tg-yw4l"},[e._v("- Pan")])])])]),n("v-card-actions",[n("v-spacer"),n("v-btn",{attrs:{color:"green darken-1",text:""},on:{click:function(t){e.dialog=!1}}},[e._v(" Close ")])],1)],1)],1)},b_=[],__={data:function(){return{dialog:!1}}},P_=__,C_=Object(Jw["a"])(P_,w_,b_,!1,null,"1f13a03b",null),O_=C_.exports;Zw()(C_,{VBtn:Qw["a"],VCard:eb["a"],VCardActions:tb["a"],VCardText:tb["b"],VCardTitle:tb["c"],VDialog:_b["a"],VSpacer:Ob["a"]});var S_=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("Dialog",{attrs:{title:"Edit Device"},scopedSlots:e._u([{key:"content",fn:function(){return[n("tr",[n("h4",{staticClass:"text--primary subtitle-1"},[e._v("Rename:")]),n("td",[n("form",{attrs:{action:"#"}},[n("div",{staticClass:"mdl-textfield mdl-js-textfield mdl-textfield--floating-label"},[n("td",[n("v-text-field",{attrs:{type:"text",label:"Device Name"},model:{value:e.deviceName,callback:function(t){e.deviceName=t},expression:"deviceName"}})],1)])])])]),n("tr",[n("h4",{staticClass:"text--primary subtitle-1"},[e._v("Resize:")]),n("td",[n("form",{attrs:{action:"#"}},[n("div",{staticClass:"mdl-textfield mdl-js-textfield mdl-textfield--floating-label"},[n("v-text-field",{attrs:{pattern:"-?[0-9]*(\\.[0-9]+)?",label:"X-Span (mm)"},model:{value:e.xspan,callback:function(t){e.xspan=t},expression:"xspan"}})],1),n("div",{staticClass:"mdl-textfield mdl-js-textfield mdl-textfield--floating-label"},[n("v-text-field",{attrs:{pattern:"-?[0-9]*(\\.[0-9]+)?",label:"Y-Span (mm)"},model:{value:e.yspan,callback:function(t){e.yspan=t},expression:"yspan"}})],1)])])])]},proxy:!0},{key:"actions",fn:function(t){var r=t.callbacks;return[n("v-btn",{attrs:{dark:"",color:"green dark",elevation:"2"},on:{click:function(t){return r.close(e.onSave)}}},[e._v(" Save ")]),n("v-btn",{attrs:{dark:"",color:"red dark",elevation:"2"},on:{click:function(e){return r.close()}}},[e._v(" Cancel ")])]}}])})},R_=[],L_=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("v-dialog",{attrs:{persistent:"","max-width":"600"},scopedSlots:e._u([{key:"activator",fn:function(t){var r=t.on,o=t.attrs;return[n("v-btn",e._g(e._b({class:e.buttonClasses,attrs:{id:e.buttonID}},"v-btn",o,!1),r),[e._v(" "+e._s(e.title)+" ")])]}}]),model:{value:e.dialog,callback:function(t){e.dialog=t},expression:"dialog"}},[n("v-card",[n("v-card-title",{staticClass:"headline"},[e._v(" "+e._s(e.title)+" ")]),n("v-card-text",[e._t("content",(function(){return[e._v(" Dialog content goes here ")]}))],2),n("v-card-actions",[n("v-spacer"),e._t("actions",(function(){return[n("v-btn",{attrs:{color:"green darken-1",text:""},on:{click:function(t){return e.callbacks.close()}}},[e._v(" Close ")])]}),{callbacks:e.callbacks})],2)],1)],1)},k_=[],D_={name:"Dialog",props:{title:{type:String,required:!0},color:{type:String,required:!1,default:""},textColor:{type:String,required:!1,default:""}},data:function(){return{dialog:!1,callbacks:{}}},computed:{buttonID:function(){return this.title.toLowerCase().replace(" ","_")+"_dialog_button"},buttonClasses:function(){return[this.color&&this.color.length>0?this.color:"white",this.textColor&&this.textColor.length>0?this.textColor:"blue--text","mb-2","feature-button","button-row"]}},mounted:function(){var e=this,t=this;Wd.get().on(Wd.CLOSE_ALL_WINDOWS,(function(){t.dialog=!1})),l["default"].set(this.callbacks,"close",(function(t){t&&t(),e.dialog=!1}))}},T_=D_,F_=Object(Jw["a"])(T_,L_,k_,!1,null,"342e2370",null),E_=F_.exports;Zw()(F_,{VBtn:Qw["a"],VCard:eb["a"],VCardActions:tb["a"],VCardText:tb["b"],VCardTitle:tb["c"],VDialog:_b["a"],VSpacer:Ob["a"]});var W_={components:{Dialog:E_},data:function(){return{dialog:!1,deviceName:"",xspan:"",yspan:""}},mounted:function(){var e=this;setTimeout((function(){e.deviceName=zh.currentDevice.name,e.xspan=zh.currentDevice.getXSpan()/1e3,e.yspan=zh.currentDevice.getYSpan()/1e3}),100)},methods:{onSave:function(){zh.currentDevice.name=this.deviceName,zh.currentDevice.setXSpan(1e3*this.xspan),zh.currentDevice.setYSpan(1e3*this.yspan),zh.viewManager.view.showActiveLayer(),zh.viewManager.updateDevice(zh.currentDevice,!1)}}},x_=W_,N_=Object(Jw["a"])(x_,S_,R_,!1,null,"6f048958",null),I_=N_.exports;Zw()(N_,{VBtn:Qw["a"],VTextField:Sb["a"]});var M_=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("Dialog",{attrs:{title:"Edit Border"},scopedSlots:e._u([{key:"content",fn:function(){return[n("h4",[e._v("Drag Drop the DXF Border File:")]),n("div",{staticClass:"mdl-dialog__content"},[n("v-card",{staticClass:"mx-auto",attrs:{id:"border_import_panel",tile:"",outlined:"",width:"400",color:"grey lighten-2",height:"200"}}),n("br"),n("input",{ref:"file",staticClass:"upload",attrs:{id:"file_input",type:"file"},on:{change:function(t){return e.addFile()}}})],1)]},proxy:!0},{key:"actions",fn:function(t){var r=t.callbacks;return[n("v-btn",{attrs:{dark:"",color:"green dark"},on:{click:function(t){return e.importBorderButton()}}},[e._v(" Import Border ")]),n("v-btn",{attrs:{dark:"",color:"red dark"},on:{click:function(t){return e.deleteBorderButton()}}},[e._v(" Delete Border ")]),n("v-btn",{attrs:{color:"white"},on:{click:function(t){return r.close(e.onSave)}}},[e._v(" Okay ")])]}}])})},j_=[],A_=n("0d37"),V_=n.n(A_),B_={components:{Dialog:E_},data:function(){return{dialog:!1,dxfObject:[]}},mounted:function(){},methods:{onSave:function(){console.log("Saved data for Edit Border")},deleteBorderButton:function(){zh.viewManager.deleteBorder(),console.log("Delete border clicked"),zh.viewManager.generateBorder()},dragover:function(e){e.preventDefault(),e.currentTarget.classList.contains("bg-gray-300")||(e.currentTarget.classList.remove("bg-gray-100"),e.currentTarget.classList.add("bg-gray-300"))},dragleave:function(e){e.currentTarget.classList.add("bg-gray-100"),e.currentTarget.classList.remove("bg-gray-300")},drop:function(e){e.preventDefault(),this.$refs.file.files=e.dataTransfer.files,this.addFile(),e.currentTarget.classList.add("bg-gray-100"),e.currentTarget.classList.remove("bg-gray-300")},addFile:function(){var e=this,t=new FileReader;t.onload=function(n){e.loadDXFText(t.result)};var n=this.$refs.file.files[0];console.log(n.name),console.log(n.size),t.readAsText(n)},importBorderButton:function(){console.log("import button clicked"),zh.viewManager.deleteBorder(),zh.viewManager.importBorder(this.getDXFfile())},getDXFfile:function(){return this.$refs.dxfObject},loadDXFText:function(e){var t=new V_.a;try{this.$refs.dxfObject=t.parseSync(e),console.log("parsed dxf object",this.$refs.dxfObject)}catch(n){console.error(n.stack)}}}},G_=B_,z_=(n("62f3"),Object(Jw["a"])(G_,M_,j_,!1,null,"180b9f39",null)),U_=z_.exports;Zw()(z_,{VBtn:Qw["a"],VCard:eb["a"]});var K_=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("Dialog",{attrs:{title:"Import",color:"primary","text-color":"white--text"},scopedSlots:e._u([{key:"content",fn:function(){return[n("h4",[e._v("Drag and Drop the DXF File:")]),n("div",{staticClass:"mdl-dialog__content"},[n("v-card",{staticClass:"mx-auto",attrs:{id:"drop_box",tile:"",outlined:"",width:"400",color:"grey lighten-2",height:"200"}}),n("input",{ref:"file",staticClass:"upload",attrs:{id:"dxf_input",type:"file"}})],1)]},proxy:!0},{key:"actions",fn:function(t){var r=t.callbacks;return[n("v-btn",{staticClass:"white--text",attrs:{color:"green dark"},on:{click:function(e){return r.close()}}},[e._v(" Import ")]),n("v-btn",{staticClass:"white--text",attrs:{color:"red dark"},on:{click:function(e){return r.close()}}},[e._v(" Cancel ")])]}}])})},H_=[],Y_={components:{Dialog:E_},data:function(){return{dialog:!1}},methods:{onSave:function(){console.log("Saved data for Edit Device")}}},X_=Y_,q_=(n("3665"),Object(Jw["a"])(X_,K_,H_,!1,null,"89ff16ba",null)),J_=q_.exports;Zw()(q_,{VBtn:Qw["a"],VCard:eb["a"]});var $_=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("Dialog",{attrs:{title:"Insert Text"},scopedSlots:e._u([{key:"content",fn:function(){return[n("form",{attrs:{action:"#"}},[n("tr",[n("td",[n("v-card-text",[n("p",{staticClass:"text--primary subtitle-1"},[e._v("Text:")])])],1),n("td",{attrs:{width:"125px"}},[n("v-text-field",{model:{value:e.text,callback:function(t){e.text=t},expression:"text"}})],1),n("td",[n("v-card-text",[n("p",{staticClass:"text--primary subtitle-1"},[e._v("Font Size:")])])],1),n("td",{attrs:{width:"125px"}},[n("v-text-field",{attrs:{step:1,type:"number"},model:{value:e.fontSize,callback:function(t){e.fontSize=t},expression:"fontSize"}})],1)]),n("tr",[n("td",{attrs:{width:"100px"}},[n("v-card-text")],1),n("td",[n("v-card-text")],1),n("td",[n("v-card-text",[n("p",{staticClass:"text--primary subtitle-1"},[e._v("Select Layer:")])])],1),n("td",[n("v-select",{attrs:{items:e.displayLayers,label:"Dropdown"}})],1)])])]},proxy:!0},{key:"actions",fn:function(t){var r=t.callbacks;return[n("v-spacer"),n("v-col",[n("v-btn",{staticClass:"pa-2",style:{right:"75%",transform:"translateX(-100%)"},attrs:{color:"red darken-1",dark:""},on:{click:function(e){return r.close()}}},[e._v(" Cancel ")]),n("v-spacer")],1),n("v-btn",{staticClass:"pa-2",style:{right:"30%",transform:"translateX(-30%)"},attrs:{color:"green darken-1",dark:""},on:{click:function(t){return r.close(e.insertText)}}},[e._v(" Insert ")])]}}])},[n("v-card-title",{staticClass:"h6"},[e._v("Insert")])],1)},Z_=[],Q_={components:{Dialog:E_},data:function(){return{text:"",fontSize:"12",layers:[]}},computed:{displayLayers:function(){var e=this.layers.map((function(e,t){var n="Layer ".concat(Math.floor(t/3)+1," - ").concat(e.name);return n}));return e}},mounted:function(){var e=this;setTimeout((function(){e.layers=zh.currentDevice.layers,e.fontSize=zh.viewManager.tools.InsertTextTool.fontSize}),1e3)},methods:{insertText:function(){zh.viewManager.tools.InsertTextTool.text=this.text,zh.viewManager.tools.fontSize=parseInt(this.fontSize),zh.viewManager.activateTool("InsertTextTool")}}},eP=Q_,tP=n("b974"),nP=Object(Jw["a"])(eP,$_,Z_,!1,null,null,null),rP=nP.exports;Zw()(nP,{VBtn:Qw["a"],VCardText:tb["b"],VCardTitle:tb["c"],VCol:bb["a"],VSelect:tP["a"],VSpacer:Ob["a"],VTextField:Sb["a"]});var oP=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("v-card",{attrs:{elevation:"0"}},[n("v-card-title",{staticClass:"py-2"},[n("span",[e._v("Levels")]),n("v-btn",{attrs:{icon:"",small:"",fab:"",color:"primary"},on:{click:e.addLevel}},[n("v-icon",[e._v("mdi-plus")])],1)],1),n("v-card-text",{staticClass:"px-1"},e._l(e.levels,(function(t){return n("div",{key:t.id,staticClass:"my-1 mx-3"},[n("v-btn",{attrs:{disabled:0===t.id,icon:"",small:""},on:{click:function(n){return e.deleteLevel(t)}}},[n("v-icon",[e._v("mdi-delete")])],1),n("v-btn-toggle",{attrs:{"v-model":t.mode,tile:"",borderless:""}},[n("v-btn",{attrs:{small:"",color:e.getButtonColor(t,0)},on:{click:function(n){return e.layerModeClicked(t,0)}}},[n("span",[e._v("Flow")])]),n("v-btn",{attrs:{small:"",color:e.getButtonColor(t,1)},on:{click:function(n){return e.layerModeClicked(t,1)}}},[n("span",[e._v("Ctrl")])]),n("v-btn",{attrs:{small:"",color:e.getButtonColor(t,2)},on:{click:function(n){return e.layerModeClicked(t,2)}}},[n("span",[e._v("Int")])])],1)],1)})),0)],1)},iP=[],aP={name:"LayerToolbar",data:function(){return{selectedMode:0,disabled:!1,renderLayers:[],layers:[],levels:[],toggleMode:[0]}},computed:{selectedLevel:function(){var e=zh.viewManager.activeRenderLayer,t=e%3;return e-=t,e/3}},watch:{layers:{handler:function(e){console.log("layers changed",e);var t=[];for(var n in e)n%3==0&&t.push({id:n/3,mode:0});this.levels=t}}},mounted:function(){var e=this;setTimeout((function(){e.layers=zh.currentDevice.layers}),1e3)},methods:{addLevel:function(){zh.viewManager.createNewLayerBlock()},layerModeClicked:function(e,t){for(var n in this.levels)this.levels[n].id==e.id?this.levels[n].mode=t:this.levels[n].mode=null;this.levels[e.id].mode=t,zh.viewManager.setActiveRenderLayer(3*e.id+t)},deleteLevel:function(e){zh.viewManager.deleteLayerBlock(e.id)},getButtonColor:function(e,t){return e.id!=this.selectedLevel?"":e.id==this.selectedLevel&&e.mode==t?0==t?"blue white--text":1==t?"red white--text":"green white--text":""}}},lP=aP,sP=(n("2a51"),n("a609")),uP=n("132d"),cP=Object(Jw["a"])(lP,oP,iP,!1,null,"088f6ffc",null),hP=cP.exports;Zw()(cP,{VBtn:Qw["a"],VBtnToggle:sP["a"],VCard:eb["a"],VCardText:tb["b"],VCardTitle:tb["c"],VIcon:uP["a"]});var fP=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",[n("v-divider"),n("v-card",{attrs:{elevation:"0"}},[n("v-card-text",{staticClass:"px-1"},[n("ConnectionPropertyDrawer")],1),n("v-card-title",{staticClass:"py-2"},[n("span",[e._v("Features")])]),n("v-card-text",{staticClass:"px-1"},[n("PropertyDrawer",{attrs:{mint:"CHANNEL",spec:e.channelSpec}}),n("PropertyDrawer",{attrs:{mint:"ROUNDED CHANNEL",spec:e.roundedChannelSpec}}),n("PropertyDrawer",{attrs:{mint:"TRANSITION",spec:e.transitionSpec}}),n("PropertyDrawer",{attrs:{mint:"ALIGNMENT MARKS",spec:e.alignmentMarksSpec}})],1)],1),e._l(Object.keys(e.toolTree),(function(t){return n("v-card",{key:t,attrs:{elevation:"0"}},[n("v-card-title",{staticClass:"py-2"},[n("span",[e._v(e._s(t))])]),n("v-card-text",{staticClass:"px-1"},e._l(e.toolTree[t],(function(e){return n("PropertyDrawer",{key:e,attrs:{mint:e}})})),1),n("v-divider")],1)}))],2)},dP=[],pP=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"property-drawer-parent"},[n("v-btn",{ref:"activator",class:e.buttonClasses,attrs:{medium:""},on:{click:function(t){return e.activateTool()}}},[e._v(e._s(e.shortenedMINT)+" "),n("v-btn",{staticClass:"setting-icon-button",attrs:{icon:"",color:"blue",right:"",small:""},on:{click:function(t){return t.stopPropagation(),e.showProperties()}}},[n("v-icon",[e._v("mdi-cog")])],1)],1),n("div",{ref:"drawer",staticClass:"property-drawer"},[e.showDrawer?n("v-card",[n("v-card-title",{staticClass:"subtitle-1 pb-0"},[e._v(e._s(e.title))]),n("v-card-text",[n("PropertyBlock",{attrs:{title:e.mint,spec:e.storedSpec},on:{update:e.updateParameter}})],1)],1):e._e()],1)],1)},vP=[],gP={name:"PropertyDrawer",components:{PropertyBlock:Ub},props:{mint:{type:String,required:!0},spec:{type:Array,required:!1,default:function(){return[{min:0,max:110,units:"",value:0}]}},activatedColor:{type:String,required:!1,default:"primary"},activatedTextColor:{type:String,required:!1,default:"white--text"}},data:function(){return{storedSpec:[{min:0,max:110,units:"",value:0}],activated:!1,activeTool:null,title:"",showDrawer:!1}},computed:{specClone:function(){var e=JSON.parse(JSON.stringify(this.storedSpec));return e},buttonClasses:function(){return[this.activated?this.activatedColor:"white",this.activated?this.activatedTextColor:"blue--text","mx-auto","my-1","btn"]},shortenedMINT:function(){return this.mint.substring(0,15)}},mounted:function(){Wd.get().on(Wd.CLOSE_ALL_WINDOWS,(function(){this.dialog=!1})),Wd.get().on(Wd.NAVBAR_SCROLL_EVENT,this.setDrawerPosition)},methods:{showProperties:function(){this.showDrawer=!this.showDrawer;var e=document.querySelector("[data-app]");e||console.error("Could not find [data-app] element"),this.setDrawerPosition(),e.appendChild(this.$refs.drawer)},activateTool:function(){this.activated=!this.activated,this.activated?(this.storedSpec=this.spec,this.storedSpec=this.computedSpecForMINT(this.mint),this.activeTool=zh.viewManager.activateComponentPlacementTool(this.mint,this.storedSpec),this.showProperties()):(zh.viewManager.deactivateComponentPlacementTool(),this.activeTool=null,this.showDrawer=!1)},handleScroll:function(){this.setDrawerPosition()},setDrawerPosition:function(){if(this.activated){var e=this.$refs.activator.$el.getBoundingClientRect();this.$refs.drawer.style.top=e.bottom-e.height+"px"}},updateParameter:function(e,t){console.log("activeTool",this.activeTool,e,t)},computedSpecForMINT:function(e){var t=Tc.getDefinitionForMINT(e),n=[];for(var r in t.heritable){var o={min:t.minimum[r],max:t.maximum[r],value:t.defaults[r],units:t.units[r],steps:(t.maximum[r]-t.minimum[r])/10,name:r};n.push(o)}return n}}},yP=gP,mP=(n("6aa7"),Object(Jw["a"])(yP,pP,vP,!1,null,"420c4732",null)),wP=mP.exports;Zw()(mP,{VBtn:Qw["a"],VCard:eb["a"],VCardText:tb["b"],VCardTitle:tb["c"],VIcon:uP["a"]});var bP=function(){var e=this,t=e.$createElement,r=e._self._c||t;return r("div",{staticClass:"property-drawer-parent"},[r("v-btn",{ref:"activator",class:e.buttonClasses,on:{click:function(t){return e.showProperties()}}},[e._v("Connection ")]),r("div",{ref:"drawer",staticClass:"connection-property-drawer"},[e.activated?r("v-card",[r("v-card-text",[r("v-row",{attrs:{justify:"center"}},[r("v-expansion-panels",{attrs:{accordion:""}},[r("v-expansion-panel",[r("v-expansion-panel-header",[e._v(e._s(e.current_connection_suggestion))]),r("v-expansion-panel-content",[r("v-row",[r("v-col",[r("v-card-text",[r("v-row",{attrs:{cols:"2"}},[r("PropertyBlock",{attrs:{title:"Connection",spec:e.spec},on:{update:e.updateParameter}})],1)],1)],1),r("v-divider",{attrs:{vertical:"",inset:""}}),r("v-col",[r("v-card-text",[r("v-row",[r("v-text-field",{staticClass:"special",attrs:{disabled:!e.connectionRenameMode,label:"Connection Name"},scopedSlots:e._u([{key:"append",fn:function(){return[e.connectionRenameMode?e._e():r("v-btn",{staticClass:"ma-0",attrs:{disabled:e.connectionRenameMode,color:"primary",icon:"","x-small":"",depressed:"",tile:""},on:{click:function(t){e.connectionRenameMode=!0}}},[r("v-icon",[e._v("mdi-pencil")])],1),e.connectionRenameMode?r("v-btn",{staticClass:"ma-0",attrs:{disabled:!e.connectionRenameMode,icon:"","x-small":"",depressed:"",tile:"",color:"green"},on:{click:e.renameConnection}},[r("v-icon",[e._v("mdi-check")])],1):e._e(),e.connectionRenameMode?r("v-btn",{staticClass:"ma-0",attrs:{disabled:!e.connectionRenameMode,color:"red",icon:"",tile:"","x-small":"",depressed:""},on:{click:e.renameConnectionCancel}},[r("v-icon",[e._v("mdi-cancel")])],1):e._e()]},proxy:!0}],null,!1,2922280259),model:{value:e.connectionName,callback:function(t){e.connectionName=t},expression:"connectionName"}})],1),r("v-row",{attrs:{"no-gutters":""}},[e._v(" Source: "),e._l(e.sources,(function(t){return r("v-col",{key:t.name,attrs:{cols:"4"}},[e.chip1?r("v-chip",{attrs:{small:"",close:"",color:"green","text-color":"white",closable:""},on:{"click:close":function(t){e.chip1=!1}}},[e._v(e._s(t.name))]):e._e()],1)}))],2),r("v-row",{attrs:{"no-gutters":""}},[e._v(" Sinks: ")]),r("v-row",{attrs:{"no-gutters":""}},e._l(e.sinks,(function(t){return r("v-col",{key:t.name,attrs:{cols:"4"}},[e.chip2?r("v-chip",{attrs:{small:"",close:"",color:"green","text-color":"white"},on:{"click:close":function(t){e.chip2=!1}}},[e._v(e._s(t.name))]):e._e()],1)})),1)],1)],1),r("v-divider",{attrs:{vertical:"",inset:""}}),r("v-col",{attrs:{cols:"3"}},[r("v-row",{attrs:{"no-gutters":""}},[e._v(" Connection Profile ")]),r("v-row",{attrs:{"no-gutters":""}},[r("v-select",{attrs:{items:e.connectionProfiles},model:{value:e.selectedProfile,callback:function(t){e.selectedProfile=t},expression:"selectedProfile"}})],1),r("v-row",[r("v-img",{staticClass:"image-placeholder",attrs:{"max-height":"150","max-width":"150",src:n("384c")}})],1)],1)],1)],1)],1)],1)],1)],1)],1):e._e()],1)],1)},_P=[],PP=(n("6dfc"),n("4a7a")),CP=n.n(PP);l["default"].component("v-select",CP.a);var OP={name:"ConnectionPropertyDrawer",components:{PropertyBlock:Ub},icons:{iconfont:"mdi"},data:function(){return{connectionName:"NewConnection",connectionRenameMode:!1,spec:this.computedSpec("Connection"),chip1:!0,chip2:!0,activated:!1,isEditing:!1,connectionProfiles:[],selectedProfile:"",previews:{CHANNEL:"@/assets/technology/CHANNEL.png"},activeTool:null}},computed:{buttonClasses:function(){return[this.activated?this.activatedColor:"white",this.activated?this.activatedTextColor:"blue--text","mx-auto","my-1","btn"]},sinks:function(){if(null===this.activeTool)return[];console.log("sinks",this.activeTool.sinks);for(var e=[],t=0;t=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,a=!0,l=!1;return{s:function(){n=n.call(e)},n:function(){var e=n.next();return a=e.done,e},e:function(e){l=!0,i=e},f:function(){try{a||null==n.return||n.return()}finally{if(l)throw i}}}}function $P(e,t){if(e){if("string"===typeof e)return ZP(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?ZP(e,t):void 0}}function ZP(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n 0) {\n addClass(element, className);\n setTimeout(function () {\n removeClass(element, className);\n }, duration);\n }\n }\n // Limits a value to 0 - 100\n function limit(a) {\n return Math.max(Math.min(a, 100), 0);\n }\n // Wraps a variable as an array, if it isn't one yet.\n // Note that an input array is returned by reference!\n function asArray(a) {\n return Array.isArray(a) ? a : [a];\n }\n // Counts decimals\n function countDecimals(numStr) {\n numStr = String(numStr);\n var pieces = numStr.split(\".\");\n return pieces.length > 1 ? pieces[1].length : 0;\n }\n // http://youmightnotneedjquery.com/#add_class\n function addClass(el, className) {\n if (el.classList && !/\\s/.test(className)) {\n el.classList.add(className);\n }\n else {\n el.className += \" \" + className;\n }\n }\n // http://youmightnotneedjquery.com/#remove_class\n function removeClass(el, className) {\n if (el.classList && !/\\s/.test(className)) {\n el.classList.remove(className);\n }\n else {\n el.className = el.className.replace(new RegExp(\"(^|\\\\b)\" + className.split(\" \").join(\"|\") + \"(\\\\b|$)\", \"gi\"), \" \");\n }\n }\n // https://plainjs.com/javascript/attributes/adding-removing-and-testing-for-classes-9/\n function hasClass(el, className) {\n return el.classList ? el.classList.contains(className) : new RegExp(\"\\\\b\" + className + \"\\\\b\").test(el.className);\n }\n // https://developer.mozilla.org/en-US/docs/Web/API/Window/scrollY#Notes\n function getPageOffset(doc) {\n var supportPageOffset = window.pageXOffset !== undefined;\n var isCSS1Compat = (doc.compatMode || \"\") === \"CSS1Compat\";\n var x = supportPageOffset\n ? window.pageXOffset\n : isCSS1Compat\n ? doc.documentElement.scrollLeft\n : doc.body.scrollLeft;\n var y = supportPageOffset\n ? window.pageYOffset\n : isCSS1Compat\n ? doc.documentElement.scrollTop\n : doc.body.scrollTop;\n return {\n x: x,\n y: y,\n };\n }\n // we provide a function to compute constants instead\n // of accessing window.* as soon as the module needs it\n // so that we do not compute anything if not needed\n function getActions() {\n // Determine the events to bind. IE11 implements pointerEvents without\n // a prefix, which breaks compatibility with the IE10 implementation.\n return window.navigator.pointerEnabled\n ? {\n start: \"pointerdown\",\n move: \"pointermove\",\n end: \"pointerup\",\n }\n : window.navigator.msPointerEnabled\n ? {\n start: \"MSPointerDown\",\n move: \"MSPointerMove\",\n end: \"MSPointerUp\",\n }\n : {\n start: \"mousedown touchstart\",\n move: \"mousemove touchmove\",\n end: \"mouseup touchend\",\n };\n }\n // https://github.com/WICG/EventListenerOptions/blob/gh-pages/explainer.md\n // Issue #785\n function getSupportsPassive() {\n var supportsPassive = false;\n /* eslint-disable */\n try {\n var opts = Object.defineProperty({}, \"passive\", {\n get: function () {\n supportsPassive = true;\n },\n });\n // @ts-ignore\n window.addEventListener(\"test\", null, opts);\n }\n catch (e) { }\n /* eslint-enable */\n return supportsPassive;\n }\n function getSupportsTouchActionNone() {\n return window.CSS && CSS.supports && CSS.supports(\"touch-action\", \"none\");\n }\n //endregion\n //region Range Calculation\n // Determine the size of a sub-range in relation to a full range.\n function subRangeRatio(pa, pb) {\n return 100 / (pb - pa);\n }\n // (percentage) How many percent is this value of this range?\n function fromPercentage(range, value, startRange) {\n return (value * 100) / (range[startRange + 1] - range[startRange]);\n }\n // (percentage) Where is this value on this range?\n function toPercentage(range, value) {\n return fromPercentage(range, range[0] < 0 ? value + Math.abs(range[0]) : value - range[0], 0);\n }\n // (value) How much is this percentage on this range?\n function isPercentage(range, value) {\n return (value * (range[1] - range[0])) / 100 + range[0];\n }\n function getJ(value, arr) {\n var j = 1;\n while (value >= arr[j]) {\n j += 1;\n }\n return j;\n }\n // (percentage) Input a value, find where, on a scale of 0-100, it applies.\n function toStepping(xVal, xPct, value) {\n if (value >= xVal.slice(-1)[0]) {\n return 100;\n }\n var j = getJ(value, xVal);\n var va = xVal[j - 1];\n var vb = xVal[j];\n var pa = xPct[j - 1];\n var pb = xPct[j];\n return pa + toPercentage([va, vb], value) / subRangeRatio(pa, pb);\n }\n // (value) Input a percentage, find where it is on the specified range.\n function fromStepping(xVal, xPct, value) {\n // There is no range group that fits 100\n if (value >= 100) {\n return xVal.slice(-1)[0];\n }\n var j = getJ(value, xPct);\n var va = xVal[j - 1];\n var vb = xVal[j];\n var pa = xPct[j - 1];\n var pb = xPct[j];\n return isPercentage([va, vb], (value - pa) * subRangeRatio(pa, pb));\n }\n // (percentage) Get the step that applies at a certain value.\n function getStep(xPct, xSteps, snap, value) {\n if (value === 100) {\n return value;\n }\n var j = getJ(value, xPct);\n var a = xPct[j - 1];\n var b = xPct[j];\n // If 'snap' is set, steps are used as fixed points on the slider.\n if (snap) {\n // Find the closest position, a or b.\n if (value - a > (b - a) / 2) {\n return b;\n }\n return a;\n }\n if (!xSteps[j - 1]) {\n return value;\n }\n return xPct[j - 1] + closest(value - xPct[j - 1], xSteps[j - 1]);\n }\n //endregion\n //region Spectrum\n var Spectrum = /** @class */ (function () {\n function Spectrum(entry, snap, singleStep) {\n this.xPct = [];\n this.xVal = [];\n this.xSteps = [];\n this.xNumSteps = [];\n this.xHighestCompleteStep = [];\n this.xSteps = [singleStep || false];\n this.xNumSteps = [false];\n this.snap = snap;\n var index;\n var ordered = [];\n // Map the object keys to an array.\n Object.keys(entry).forEach(function (index) {\n ordered.push([asArray(entry[index]), index]);\n });\n // Sort all entries by value (numeric sort).\n ordered.sort(function (a, b) {\n return a[0][0] - b[0][0];\n });\n // Convert all entries to subranges.\n for (index = 0; index < ordered.length; index++) {\n this.handleEntryPoint(ordered[index][1], ordered[index][0]);\n }\n // Store the actual step values.\n // xSteps is sorted in the same order as xPct and xVal.\n this.xNumSteps = this.xSteps.slice(0);\n // Convert all numeric steps to the percentage of the subrange they represent.\n for (index = 0; index < this.xNumSteps.length; index++) {\n this.handleStepPoint(index, this.xNumSteps[index]);\n }\n }\n Spectrum.prototype.getDistance = function (value) {\n var distances = [];\n for (var index = 0; index < this.xNumSteps.length - 1; index++) {\n distances[index] = fromPercentage(this.xVal, value, index);\n }\n return distances;\n };\n // Calculate the percentual distance over the whole scale of ranges.\n // direction: 0 = backwards / 1 = forwards\n Spectrum.prototype.getAbsoluteDistance = function (value, distances, direction) {\n var xPct_index = 0;\n // Calculate range where to start calculation\n if (value < this.xPct[this.xPct.length - 1]) {\n while (value > this.xPct[xPct_index + 1]) {\n xPct_index++;\n }\n }\n else if (value === this.xPct[this.xPct.length - 1]) {\n xPct_index = this.xPct.length - 2;\n }\n // If looking backwards and the value is exactly at a range separator then look one range further\n if (!direction && value === this.xPct[xPct_index + 1]) {\n xPct_index++;\n }\n if (distances === null) {\n distances = [];\n }\n var start_factor;\n var rest_factor = 1;\n var rest_rel_distance = distances[xPct_index];\n var range_pct = 0;\n var rel_range_distance = 0;\n var abs_distance_counter = 0;\n var range_counter = 0;\n // Calculate what part of the start range the value is\n if (direction) {\n start_factor = (value - this.xPct[xPct_index]) / (this.xPct[xPct_index + 1] - this.xPct[xPct_index]);\n }\n else {\n start_factor = (this.xPct[xPct_index + 1] - value) / (this.xPct[xPct_index + 1] - this.xPct[xPct_index]);\n }\n // Do until the complete distance across ranges is calculated\n while (rest_rel_distance > 0) {\n // Calculate the percentage of total range\n range_pct = this.xPct[xPct_index + 1 + range_counter] - this.xPct[xPct_index + range_counter];\n // Detect if the margin, padding or limit is larger then the current range and calculate\n if (distances[xPct_index + range_counter] * rest_factor + 100 - start_factor * 100 > 100) {\n // If larger then take the percentual distance of the whole range\n rel_range_distance = range_pct * start_factor;\n // Rest factor of relative percentual distance still to be calculated\n rest_factor = (rest_rel_distance - 100 * start_factor) / distances[xPct_index + range_counter];\n // Set start factor to 1 as for next range it does not apply.\n start_factor = 1;\n }\n else {\n // If smaller or equal then take the percentual distance of the calculate percentual part of that range\n rel_range_distance = ((distances[xPct_index + range_counter] * range_pct) / 100) * rest_factor;\n // No rest left as the rest fits in current range\n rest_factor = 0;\n }\n if (direction) {\n abs_distance_counter = abs_distance_counter - rel_range_distance;\n // Limit range to first range when distance becomes outside of minimum range\n if (this.xPct.length + range_counter >= 1) {\n range_counter--;\n }\n }\n else {\n abs_distance_counter = abs_distance_counter + rel_range_distance;\n // Limit range to last range when distance becomes outside of maximum range\n if (this.xPct.length - range_counter >= 1) {\n range_counter++;\n }\n }\n // Rest of relative percentual distance still to be calculated\n rest_rel_distance = distances[xPct_index + range_counter] * rest_factor;\n }\n return value + abs_distance_counter;\n };\n Spectrum.prototype.toStepping = function (value) {\n value = toStepping(this.xVal, this.xPct, value);\n return value;\n };\n Spectrum.prototype.fromStepping = function (value) {\n return fromStepping(this.xVal, this.xPct, value);\n };\n Spectrum.prototype.getStep = function (value) {\n value = getStep(this.xPct, this.xSteps, this.snap, value);\n return value;\n };\n Spectrum.prototype.getDefaultStep = function (value, isDown, size) {\n var j = getJ(value, this.xPct);\n // When at the top or stepping down, look at the previous sub-range\n if (value === 100 || (isDown && value === this.xPct[j - 1])) {\n j = Math.max(j - 1, 1);\n }\n return (this.xVal[j] - this.xVal[j - 1]) / size;\n };\n Spectrum.prototype.getNearbySteps = function (value) {\n var j = getJ(value, this.xPct);\n return {\n stepBefore: {\n startValue: this.xVal[j - 2],\n step: this.xNumSteps[j - 2],\n highestStep: this.xHighestCompleteStep[j - 2],\n },\n thisStep: {\n startValue: this.xVal[j - 1],\n step: this.xNumSteps[j - 1],\n highestStep: this.xHighestCompleteStep[j - 1],\n },\n stepAfter: {\n startValue: this.xVal[j],\n step: this.xNumSteps[j],\n highestStep: this.xHighestCompleteStep[j],\n },\n };\n };\n Spectrum.prototype.countStepDecimals = function () {\n var stepDecimals = this.xNumSteps.map(countDecimals);\n return Math.max.apply(null, stepDecimals);\n };\n Spectrum.prototype.hasNoSize = function () {\n return this.xVal[0] === this.xVal[this.xVal.length - 1];\n };\n // Outside testing\n Spectrum.prototype.convert = function (value) {\n return this.getStep(this.toStepping(value));\n };\n Spectrum.prototype.handleEntryPoint = function (index, value) {\n var percentage;\n // Covert min/max syntax to 0 and 100.\n if (index === \"min\") {\n percentage = 0;\n }\n else if (index === \"max\") {\n percentage = 100;\n }\n else {\n percentage = parseFloat(index);\n }\n // Check for correct input.\n if (!isNumeric(percentage) || !isNumeric(value[0])) {\n throw new Error(\"noUiSlider: 'range' value isn't numeric.\");\n }\n // Store values.\n this.xPct.push(percentage);\n this.xVal.push(value[0]);\n var value1 = Number(value[1]);\n // NaN will evaluate to false too, but to keep\n // logging clear, set step explicitly. Make sure\n // not to override the 'step' setting with false.\n if (!percentage) {\n if (!isNaN(value1)) {\n this.xSteps[0] = value1;\n }\n }\n else {\n this.xSteps.push(isNaN(value1) ? false : value1);\n }\n this.xHighestCompleteStep.push(0);\n };\n Spectrum.prototype.handleStepPoint = function (i, n) {\n // Ignore 'false' stepping.\n if (!n) {\n return;\n }\n // Step over zero-length ranges (#948);\n if (this.xVal[i] === this.xVal[i + 1]) {\n this.xSteps[i] = this.xHighestCompleteStep[i] = this.xVal[i];\n return;\n }\n // Factor to range ratio\n this.xSteps[i] =\n fromPercentage([this.xVal[i], this.xVal[i + 1]], n, 0) / subRangeRatio(this.xPct[i], this.xPct[i + 1]);\n var totalSteps = (this.xVal[i + 1] - this.xVal[i]) / this.xNumSteps[i];\n var highestStep = Math.ceil(Number(totalSteps.toFixed(3)) - 1);\n var step = this.xVal[i] + this.xNumSteps[i] * highestStep;\n this.xHighestCompleteStep[i] = step;\n };\n return Spectrum;\n }());\n //endregion\n //region Options\n /*\tEvery input option is tested and parsed. This will prevent\n endless validation in internal methods. These tests are\n structured with an item for every option available. An\n option can be marked as required by setting the 'r' flag.\n The testing function is provided with three arguments:\n - The provided value for the option;\n - A reference to the options object;\n - The name for the option;\n\n The testing function returns false when an error is detected,\n or true when everything is OK. It can also modify the option\n object, to make sure all values can be correctly looped elsewhere. */\n //region Defaults\n var defaultFormatter = {\n to: function (value) {\n return value === undefined ? \"\" : value.toFixed(2);\n },\n from: Number,\n };\n var cssClasses = {\n target: \"target\",\n base: \"base\",\n origin: \"origin\",\n handle: \"handle\",\n handleLower: \"handle-lower\",\n handleUpper: \"handle-upper\",\n touchArea: \"touch-area\",\n horizontal: \"horizontal\",\n vertical: \"vertical\",\n background: \"background\",\n connect: \"connect\",\n connects: \"connects\",\n ltr: \"ltr\",\n rtl: \"rtl\",\n textDirectionLtr: \"txt-dir-ltr\",\n textDirectionRtl: \"txt-dir-rtl\",\n draggable: \"draggable\",\n drag: \"state-drag\",\n tap: \"state-tap\",\n active: \"active\",\n tooltip: \"tooltip\",\n pips: \"pips\",\n pipsHorizontal: \"pips-horizontal\",\n pipsVertical: \"pips-vertical\",\n marker: \"marker\",\n markerHorizontal: \"marker-horizontal\",\n markerVertical: \"marker-vertical\",\n markerNormal: \"marker-normal\",\n markerLarge: \"marker-large\",\n markerSub: \"marker-sub\",\n value: \"value\",\n valueHorizontal: \"value-horizontal\",\n valueVertical: \"value-vertical\",\n valueNormal: \"value-normal\",\n valueLarge: \"value-large\",\n valueSub: \"value-sub\",\n };\n // Namespaces of internal event listeners\n var INTERNAL_EVENT_NS = {\n tooltips: \".__tooltips\",\n aria: \".__aria\",\n };\n //endregion\n function testStep(parsed, entry) {\n if (!isNumeric(entry)) {\n throw new Error(\"noUiSlider: 'step' is not numeric.\");\n }\n // The step option can still be used to set stepping\n // for linear sliders. Overwritten if set in 'range'.\n parsed.singleStep = entry;\n }\n function testKeyboardPageMultiplier(parsed, entry) {\n if (!isNumeric(entry)) {\n throw new Error(\"noUiSlider: 'keyboardPageMultiplier' is not numeric.\");\n }\n parsed.keyboardPageMultiplier = entry;\n }\n function testKeyboardMultiplier(parsed, entry) {\n if (!isNumeric(entry)) {\n throw new Error(\"noUiSlider: 'keyboardMultiplier' is not numeric.\");\n }\n parsed.keyboardMultiplier = entry;\n }\n function testKeyboardDefaultStep(parsed, entry) {\n if (!isNumeric(entry)) {\n throw new Error(\"noUiSlider: 'keyboardDefaultStep' is not numeric.\");\n }\n parsed.keyboardDefaultStep = entry;\n }\n function testRange(parsed, entry) {\n // Filter incorrect input.\n if (typeof entry !== \"object\" || Array.isArray(entry)) {\n throw new Error(\"noUiSlider: 'range' is not an object.\");\n }\n // Catch missing start or end.\n if (entry.min === undefined || entry.max === undefined) {\n throw new Error(\"noUiSlider: Missing 'min' or 'max' in 'range'.\");\n }\n parsed.spectrum = new Spectrum(entry, parsed.snap || false, parsed.singleStep);\n }\n function testStart(parsed, entry) {\n entry = asArray(entry);\n // Validate input. Values aren't tested, as the public .val method\n // will always provide a valid location.\n if (!Array.isArray(entry) || !entry.length) {\n throw new Error(\"noUiSlider: 'start' option is incorrect.\");\n }\n // Store the number of handles.\n parsed.handles = entry.length;\n // When the slider is initialized, the .val method will\n // be called with the start options.\n parsed.start = entry;\n }\n function testSnap(parsed, entry) {\n if (typeof entry !== \"boolean\") {\n throw new Error(\"noUiSlider: 'snap' option must be a boolean.\");\n }\n // Enforce 100% stepping within subranges.\n parsed.snap = entry;\n }\n function testAnimate(parsed, entry) {\n if (typeof entry !== \"boolean\") {\n throw new Error(\"noUiSlider: 'animate' option must be a boolean.\");\n }\n // Enforce 100% stepping within subranges.\n parsed.animate = entry;\n }\n function testAnimationDuration(parsed, entry) {\n if (typeof entry !== \"number\") {\n throw new Error(\"noUiSlider: 'animationDuration' option must be a number.\");\n }\n parsed.animationDuration = entry;\n }\n function testConnect(parsed, entry) {\n var connect = [false];\n var i;\n // Map legacy options\n if (entry === \"lower\") {\n entry = [true, false];\n }\n else if (entry === \"upper\") {\n entry = [false, true];\n }\n // Handle boolean options\n if (entry === true || entry === false) {\n for (i = 1; i < parsed.handles; i++) {\n connect.push(entry);\n }\n connect.push(false);\n }\n // Reject invalid input\n else if (!Array.isArray(entry) || !entry.length || entry.length !== parsed.handles + 1) {\n throw new Error(\"noUiSlider: 'connect' option doesn't match handle count.\");\n }\n else {\n connect = entry;\n }\n parsed.connect = connect;\n }\n function testOrientation(parsed, entry) {\n // Set orientation to an a numerical value for easy\n // array selection.\n switch (entry) {\n case \"horizontal\":\n parsed.ort = 0;\n break;\n case \"vertical\":\n parsed.ort = 1;\n break;\n default:\n throw new Error(\"noUiSlider: 'orientation' option is invalid.\");\n }\n }\n function testMargin(parsed, entry) {\n if (!isNumeric(entry)) {\n throw new Error(\"noUiSlider: 'margin' option must be numeric.\");\n }\n // Issue #582\n if (entry === 0) {\n return;\n }\n parsed.margin = parsed.spectrum.getDistance(entry);\n }\n function testLimit(parsed, entry) {\n if (!isNumeric(entry)) {\n throw new Error(\"noUiSlider: 'limit' option must be numeric.\");\n }\n parsed.limit = parsed.spectrum.getDistance(entry);\n if (!parsed.limit || parsed.handles < 2) {\n throw new Error(\"noUiSlider: 'limit' option is only supported on linear sliders with 2 or more handles.\");\n }\n }\n function testPadding(parsed, entry) {\n var index;\n if (!isNumeric(entry) && !Array.isArray(entry)) {\n throw new Error(\"noUiSlider: 'padding' option must be numeric or array of exactly 2 numbers.\");\n }\n if (Array.isArray(entry) && !(entry.length === 2 || isNumeric(entry[0]) || isNumeric(entry[1]))) {\n throw new Error(\"noUiSlider: 'padding' option must be numeric or array of exactly 2 numbers.\");\n }\n if (entry === 0) {\n return;\n }\n if (!Array.isArray(entry)) {\n entry = [entry, entry];\n }\n // 'getDistance' returns false for invalid values.\n parsed.padding = [parsed.spectrum.getDistance(entry[0]), parsed.spectrum.getDistance(entry[1])];\n for (index = 0; index < parsed.spectrum.xNumSteps.length - 1; index++) {\n // last \"range\" can't contain step size as it is purely an endpoint.\n if (parsed.padding[0][index] < 0 || parsed.padding[1][index] < 0) {\n throw new Error(\"noUiSlider: 'padding' option must be a positive number(s).\");\n }\n }\n var totalPadding = entry[0] + entry[1];\n var firstValue = parsed.spectrum.xVal[0];\n var lastValue = parsed.spectrum.xVal[parsed.spectrum.xVal.length - 1];\n if (totalPadding / (lastValue - firstValue) > 1) {\n throw new Error(\"noUiSlider: 'padding' option must not exceed 100% of the range.\");\n }\n }\n function testDirection(parsed, entry) {\n // Set direction as a numerical value for easy parsing.\n // Invert connection for RTL sliders, so that the proper\n // handles get the connect/background classes.\n switch (entry) {\n case \"ltr\":\n parsed.dir = 0;\n break;\n case \"rtl\":\n parsed.dir = 1;\n break;\n default:\n throw new Error(\"noUiSlider: 'direction' option was not recognized.\");\n }\n }\n function testBehaviour(parsed, entry) {\n // Make sure the input is a string.\n if (typeof entry !== \"string\") {\n throw new Error(\"noUiSlider: 'behaviour' must be a string containing options.\");\n }\n // Check if the string contains any keywords.\n // None are required.\n var tap = entry.indexOf(\"tap\") >= 0;\n var drag = entry.indexOf(\"drag\") >= 0;\n var fixed = entry.indexOf(\"fixed\") >= 0;\n var snap = entry.indexOf(\"snap\") >= 0;\n var hover = entry.indexOf(\"hover\") >= 0;\n var unconstrained = entry.indexOf(\"unconstrained\") >= 0;\n var dragAll = entry.indexOf(\"drag-all\") >= 0;\n var smoothSteps = entry.indexOf(\"smooth-steps\") >= 0;\n if (fixed) {\n if (parsed.handles !== 2) {\n throw new Error(\"noUiSlider: 'fixed' behaviour must be used with 2 handles\");\n }\n // Use margin to enforce fixed state\n testMargin(parsed, parsed.start[1] - parsed.start[0]);\n }\n if (unconstrained && (parsed.margin || parsed.limit)) {\n throw new Error(\"noUiSlider: 'unconstrained' behaviour cannot be used with margin or limit\");\n }\n parsed.events = {\n tap: tap || snap,\n drag: drag,\n dragAll: dragAll,\n smoothSteps: smoothSteps,\n fixed: fixed,\n snap: snap,\n hover: hover,\n unconstrained: unconstrained,\n };\n }\n function testTooltips(parsed, entry) {\n if (entry === false) {\n return;\n }\n if (entry === true || isValidPartialFormatter(entry)) {\n parsed.tooltips = [];\n for (var i = 0; i < parsed.handles; i++) {\n parsed.tooltips.push(entry);\n }\n }\n else {\n entry = asArray(entry);\n if (entry.length !== parsed.handles) {\n throw new Error(\"noUiSlider: must pass a formatter for all handles.\");\n }\n entry.forEach(function (formatter) {\n if (typeof formatter !== \"boolean\" && !isValidPartialFormatter(formatter)) {\n throw new Error(\"noUiSlider: 'tooltips' must be passed a formatter or 'false'.\");\n }\n });\n parsed.tooltips = entry;\n }\n }\n function testHandleAttributes(parsed, entry) {\n if (entry.length !== parsed.handles) {\n throw new Error(\"noUiSlider: must pass a attributes for all handles.\");\n }\n parsed.handleAttributes = entry;\n }\n function testAriaFormat(parsed, entry) {\n if (!isValidPartialFormatter(entry)) {\n throw new Error(\"noUiSlider: 'ariaFormat' requires 'to' method.\");\n }\n parsed.ariaFormat = entry;\n }\n function testFormat(parsed, entry) {\n if (!isValidFormatter(entry)) {\n throw new Error(\"noUiSlider: 'format' requires 'to' and 'from' methods.\");\n }\n parsed.format = entry;\n }\n function testKeyboardSupport(parsed, entry) {\n if (typeof entry !== \"boolean\") {\n throw new Error(\"noUiSlider: 'keyboardSupport' option must be a boolean.\");\n }\n parsed.keyboardSupport = entry;\n }\n function testDocumentElement(parsed, entry) {\n // This is an advanced option. Passed values are used without validation.\n parsed.documentElement = entry;\n }\n function testCssPrefix(parsed, entry) {\n if (typeof entry !== \"string\" && entry !== false) {\n throw new Error(\"noUiSlider: 'cssPrefix' must be a string or `false`.\");\n }\n parsed.cssPrefix = entry;\n }\n function testCssClasses(parsed, entry) {\n if (typeof entry !== \"object\") {\n throw new Error(\"noUiSlider: 'cssClasses' must be an object.\");\n }\n if (typeof parsed.cssPrefix === \"string\") {\n parsed.cssClasses = {};\n Object.keys(entry).forEach(function (key) {\n parsed.cssClasses[key] = parsed.cssPrefix + entry[key];\n });\n }\n else {\n parsed.cssClasses = entry;\n }\n }\n // Test all developer settings and parse to assumption-safe values.\n function testOptions(options) {\n // To prove a fix for #537, freeze options here.\n // If the object is modified, an error will be thrown.\n // Object.freeze(options);\n var parsed = {\n margin: null,\n limit: null,\n padding: null,\n animate: true,\n animationDuration: 300,\n ariaFormat: defaultFormatter,\n format: defaultFormatter,\n };\n // Tests are executed in the order they are presented here.\n var tests = {\n step: { r: false, t: testStep },\n keyboardPageMultiplier: { r: false, t: testKeyboardPageMultiplier },\n keyboardMultiplier: { r: false, t: testKeyboardMultiplier },\n keyboardDefaultStep: { r: false, t: testKeyboardDefaultStep },\n start: { r: true, t: testStart },\n connect: { r: true, t: testConnect },\n direction: { r: true, t: testDirection },\n snap: { r: false, t: testSnap },\n animate: { r: false, t: testAnimate },\n animationDuration: { r: false, t: testAnimationDuration },\n range: { r: true, t: testRange },\n orientation: { r: false, t: testOrientation },\n margin: { r: false, t: testMargin },\n limit: { r: false, t: testLimit },\n padding: { r: false, t: testPadding },\n behaviour: { r: true, t: testBehaviour },\n ariaFormat: { r: false, t: testAriaFormat },\n format: { r: false, t: testFormat },\n tooltips: { r: false, t: testTooltips },\n keyboardSupport: { r: true, t: testKeyboardSupport },\n documentElement: { r: false, t: testDocumentElement },\n cssPrefix: { r: true, t: testCssPrefix },\n cssClasses: { r: true, t: testCssClasses },\n handleAttributes: { r: false, t: testHandleAttributes },\n };\n var defaults = {\n connect: false,\n direction: \"ltr\",\n behaviour: \"tap\",\n orientation: \"horizontal\",\n keyboardSupport: true,\n cssPrefix: \"noUi-\",\n cssClasses: cssClasses,\n keyboardPageMultiplier: 5,\n keyboardMultiplier: 1,\n keyboardDefaultStep: 10,\n };\n // AriaFormat defaults to regular format, if any.\n if (options.format && !options.ariaFormat) {\n options.ariaFormat = options.format;\n }\n // Run all options through a testing mechanism to ensure correct\n // input. It should be noted that options might get modified to\n // be handled properly. E.g. wrapping integers in arrays.\n Object.keys(tests).forEach(function (name) {\n // If the option isn't set, but it is required, throw an error.\n if (!isSet(options[name]) && defaults[name] === undefined) {\n if (tests[name].r) {\n throw new Error(\"noUiSlider: '\" + name + \"' is required.\");\n }\n return;\n }\n tests[name].t(parsed, !isSet(options[name]) ? defaults[name] : options[name]);\n });\n // Forward pips options\n parsed.pips = options.pips;\n // All recent browsers accept unprefixed transform.\n // We need -ms- for IE9 and -webkit- for older Android;\n // Assume use of -webkit- if unprefixed and -ms- are not supported.\n // https://caniuse.com/#feat=transforms2d\n var d = document.createElement(\"div\");\n var msPrefix = d.style.msTransform !== undefined;\n var noPrefix = d.style.transform !== undefined;\n parsed.transformRule = noPrefix ? \"transform\" : msPrefix ? \"msTransform\" : \"webkitTransform\";\n // Pips don't move, so we can place them using left/top.\n var styles = [\n [\"left\", \"top\"],\n [\"right\", \"bottom\"],\n ];\n parsed.style = styles[parsed.dir][parsed.ort];\n return parsed;\n }\n //endregion\n function scope(target, options, originalOptions) {\n var actions = getActions();\n var supportsTouchActionNone = getSupportsTouchActionNone();\n var supportsPassive = supportsTouchActionNone && getSupportsPassive();\n // All variables local to 'scope' are prefixed with 'scope_'\n // Slider DOM Nodes\n var scope_Target = target;\n var scope_Base;\n var scope_Handles;\n var scope_Connects;\n var scope_Pips;\n var scope_Tooltips;\n // Slider state values\n var scope_Spectrum = options.spectrum;\n var scope_Values = [];\n var scope_Locations = [];\n var scope_HandleNumbers = [];\n var scope_ActiveHandlesCount = 0;\n var scope_Events = {};\n // Document Nodes\n var scope_Document = target.ownerDocument;\n var scope_DocumentElement = options.documentElement || scope_Document.documentElement;\n var scope_Body = scope_Document.body;\n // For horizontal sliders in standard ltr documents,\n // make .noUi-origin overflow to the left so the document doesn't scroll.\n var scope_DirOffset = scope_Document.dir === \"rtl\" || options.ort === 1 ? 0 : 100;\n // Creates a node, adds it to target, returns the new node.\n function addNodeTo(addTarget, className) {\n var div = scope_Document.createElement(\"div\");\n if (className) {\n addClass(div, className);\n }\n addTarget.appendChild(div);\n return div;\n }\n // Append a origin to the base\n function addOrigin(base, handleNumber) {\n var origin = addNodeTo(base, options.cssClasses.origin);\n var handle = addNodeTo(origin, options.cssClasses.handle);\n addNodeTo(handle, options.cssClasses.touchArea);\n handle.setAttribute(\"data-handle\", String(handleNumber));\n if (options.keyboardSupport) {\n // https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/tabindex\n // 0 = focusable and reachable\n handle.setAttribute(\"tabindex\", \"0\");\n handle.addEventListener(\"keydown\", function (event) {\n return eventKeydown(event, handleNumber);\n });\n }\n if (options.handleAttributes !== undefined) {\n var attributes_1 = options.handleAttributes[handleNumber];\n Object.keys(attributes_1).forEach(function (attribute) {\n handle.setAttribute(attribute, attributes_1[attribute]);\n });\n }\n handle.setAttribute(\"role\", \"slider\");\n handle.setAttribute(\"aria-orientation\", options.ort ? \"vertical\" : \"horizontal\");\n if (handleNumber === 0) {\n addClass(handle, options.cssClasses.handleLower);\n }\n else if (handleNumber === options.handles - 1) {\n addClass(handle, options.cssClasses.handleUpper);\n }\n return origin;\n }\n // Insert nodes for connect elements\n function addConnect(base, add) {\n if (!add) {\n return false;\n }\n return addNodeTo(base, options.cssClasses.connect);\n }\n // Add handles to the slider base.\n function addElements(connectOptions, base) {\n var connectBase = addNodeTo(base, options.cssClasses.connects);\n scope_Handles = [];\n scope_Connects = [];\n scope_Connects.push(addConnect(connectBase, connectOptions[0]));\n // [::::O====O====O====]\n // connectOptions = [0, 1, 1, 1]\n for (var i = 0; i < options.handles; i++) {\n // Keep a list of all added handles.\n scope_Handles.push(addOrigin(base, i));\n scope_HandleNumbers[i] = i;\n scope_Connects.push(addConnect(connectBase, connectOptions[i + 1]));\n }\n }\n // Initialize a single slider.\n function addSlider(addTarget) {\n // Apply classes and data to the target.\n addClass(addTarget, options.cssClasses.target);\n if (options.dir === 0) {\n addClass(addTarget, options.cssClasses.ltr);\n }\n else {\n addClass(addTarget, options.cssClasses.rtl);\n }\n if (options.ort === 0) {\n addClass(addTarget, options.cssClasses.horizontal);\n }\n else {\n addClass(addTarget, options.cssClasses.vertical);\n }\n var textDirection = getComputedStyle(addTarget).direction;\n if (textDirection === \"rtl\") {\n addClass(addTarget, options.cssClasses.textDirectionRtl);\n }\n else {\n addClass(addTarget, options.cssClasses.textDirectionLtr);\n }\n return addNodeTo(addTarget, options.cssClasses.base);\n }\n function addTooltip(handle, handleNumber) {\n if (!options.tooltips || !options.tooltips[handleNumber]) {\n return false;\n }\n return addNodeTo(handle.firstChild, options.cssClasses.tooltip);\n }\n function isSliderDisabled() {\n return scope_Target.hasAttribute(\"disabled\");\n }\n // Disable the slider dragging if any handle is disabled\n function isHandleDisabled(handleNumber) {\n var handleOrigin = scope_Handles[handleNumber];\n return handleOrigin.hasAttribute(\"disabled\");\n }\n function removeTooltips() {\n if (scope_Tooltips) {\n removeEvent(\"update\" + INTERNAL_EVENT_NS.tooltips);\n scope_Tooltips.forEach(function (tooltip) {\n if (tooltip) {\n removeElement(tooltip);\n }\n });\n scope_Tooltips = null;\n }\n }\n // The tooltips option is a shorthand for using the 'update' event.\n function tooltips() {\n removeTooltips();\n // Tooltips are added with options.tooltips in original order.\n scope_Tooltips = scope_Handles.map(addTooltip);\n bindEvent(\"update\" + INTERNAL_EVENT_NS.tooltips, function (values, handleNumber, unencoded) {\n if (!scope_Tooltips || !options.tooltips) {\n return;\n }\n if (scope_Tooltips[handleNumber] === false) {\n return;\n }\n var formattedValue = values[handleNumber];\n if (options.tooltips[handleNumber] !== true) {\n formattedValue = options.tooltips[handleNumber].to(unencoded[handleNumber]);\n }\n scope_Tooltips[handleNumber].innerHTML = formattedValue;\n });\n }\n function aria() {\n removeEvent(\"update\" + INTERNAL_EVENT_NS.aria);\n bindEvent(\"update\" + INTERNAL_EVENT_NS.aria, function (values, handleNumber, unencoded, tap, positions) {\n // Update Aria Values for all handles, as a change in one changes min and max values for the next.\n scope_HandleNumbers.forEach(function (index) {\n var handle = scope_Handles[index];\n var min = checkHandlePosition(scope_Locations, index, 0, true, true, true);\n var max = checkHandlePosition(scope_Locations, index, 100, true, true, true);\n var now = positions[index];\n // Formatted value for display\n var text = String(options.ariaFormat.to(unencoded[index]));\n // Map to slider range values\n min = scope_Spectrum.fromStepping(min).toFixed(1);\n max = scope_Spectrum.fromStepping(max).toFixed(1);\n now = scope_Spectrum.fromStepping(now).toFixed(1);\n handle.children[0].setAttribute(\"aria-valuemin\", min);\n handle.children[0].setAttribute(\"aria-valuemax\", max);\n handle.children[0].setAttribute(\"aria-valuenow\", now);\n handle.children[0].setAttribute(\"aria-valuetext\", text);\n });\n });\n }\n function getGroup(pips) {\n // Use the range.\n if (pips.mode === exports.PipsMode.Range || pips.mode === exports.PipsMode.Steps) {\n return scope_Spectrum.xVal;\n }\n if (pips.mode === exports.PipsMode.Count) {\n if (pips.values < 2) {\n throw new Error(\"noUiSlider: 'values' (>= 2) required for mode 'count'.\");\n }\n // Divide 0 - 100 in 'count' parts.\n var interval = pips.values - 1;\n var spread = 100 / interval;\n var values = [];\n // List these parts and have them handled as 'positions'.\n while (interval--) {\n values[interval] = interval * spread;\n }\n values.push(100);\n return mapToRange(values, pips.stepped);\n }\n if (pips.mode === exports.PipsMode.Positions) {\n // Map all percentages to on-range values.\n return mapToRange(pips.values, pips.stepped);\n }\n if (pips.mode === exports.PipsMode.Values) {\n // If the value must be stepped, it needs to be converted to a percentage first.\n if (pips.stepped) {\n return pips.values.map(function (value) {\n // Convert to percentage, apply step, return to value.\n return scope_Spectrum.fromStepping(scope_Spectrum.getStep(scope_Spectrum.toStepping(value)));\n });\n }\n // Otherwise, we can simply use the values.\n return pips.values;\n }\n return []; // pips.mode = never\n }\n function mapToRange(values, stepped) {\n return values.map(function (value) {\n return scope_Spectrum.fromStepping(stepped ? scope_Spectrum.getStep(value) : value);\n });\n }\n function generateSpread(pips) {\n function safeIncrement(value, increment) {\n // Avoid floating point variance by dropping the smallest decimal places.\n return Number((value + increment).toFixed(7));\n }\n var group = getGroup(pips);\n var indexes = {};\n var firstInRange = scope_Spectrum.xVal[0];\n var lastInRange = scope_Spectrum.xVal[scope_Spectrum.xVal.length - 1];\n var ignoreFirst = false;\n var ignoreLast = false;\n var prevPct = 0;\n // Create a copy of the group, sort it and filter away all duplicates.\n group = unique(group.slice().sort(function (a, b) {\n return a - b;\n }));\n // Make sure the range starts with the first element.\n if (group[0] !== firstInRange) {\n group.unshift(firstInRange);\n ignoreFirst = true;\n }\n // Likewise for the last one.\n if (group[group.length - 1] !== lastInRange) {\n group.push(lastInRange);\n ignoreLast = true;\n }\n group.forEach(function (current, index) {\n // Get the current step and the lower + upper positions.\n var step;\n var i;\n var q;\n var low = current;\n var high = group[index + 1];\n var newPct;\n var pctDifference;\n var pctPos;\n var type;\n var steps;\n var realSteps;\n var stepSize;\n var isSteps = pips.mode === exports.PipsMode.Steps;\n // When using 'steps' mode, use the provided steps.\n // Otherwise, we'll step on to the next subrange.\n if (isSteps) {\n step = scope_Spectrum.xNumSteps[index];\n }\n // Default to a 'full' step.\n if (!step) {\n step = high - low;\n }\n // If high is undefined we are at the last subrange. Make sure it iterates once (#1088)\n if (high === undefined) {\n high = low;\n }\n // Make sure step isn't 0, which would cause an infinite loop (#654)\n step = Math.max(step, 0.0000001);\n // Find all steps in the subrange.\n for (i = low; i <= high; i = safeIncrement(i, step)) {\n // Get the percentage value for the current step,\n // calculate the size for the subrange.\n newPct = scope_Spectrum.toStepping(i);\n pctDifference = newPct - prevPct;\n steps = pctDifference / (pips.density || 1);\n realSteps = Math.round(steps);\n // This ratio represents the amount of percentage-space a point indicates.\n // For a density 1 the points/percentage = 1. For density 2, that percentage needs to be re-divided.\n // Round the percentage offset to an even number, then divide by two\n // to spread the offset on both sides of the range.\n stepSize = pctDifference / realSteps;\n // Divide all points evenly, adding the correct number to this subrange.\n // Run up to <= so that 100% gets a point, event if ignoreLast is set.\n for (q = 1; q <= realSteps; q += 1) {\n // The ratio between the rounded value and the actual size might be ~1% off.\n // Correct the percentage offset by the number of points\n // per subrange. density = 1 will result in 100 points on the\n // full range, 2 for 50, 4 for 25, etc.\n pctPos = prevPct + q * stepSize;\n indexes[pctPos.toFixed(5)] = [scope_Spectrum.fromStepping(pctPos), 0];\n }\n // Determine the point type.\n type = group.indexOf(i) > -1 ? exports.PipsType.LargeValue : isSteps ? exports.PipsType.SmallValue : exports.PipsType.NoValue;\n // Enforce the 'ignoreFirst' option by overwriting the type for 0.\n if (!index && ignoreFirst && i !== high) {\n type = 0;\n }\n if (!(i === high && ignoreLast)) {\n // Mark the 'type' of this point. 0 = plain, 1 = real value, 2 = step value.\n indexes[newPct.toFixed(5)] = [i, type];\n }\n // Update the percentage count.\n prevPct = newPct;\n }\n });\n return indexes;\n }\n function addMarking(spread, filterFunc, formatter) {\n var _a, _b;\n var element = scope_Document.createElement(\"div\");\n var valueSizeClasses = (_a = {},\n _a[exports.PipsType.None] = \"\",\n _a[exports.PipsType.NoValue] = options.cssClasses.valueNormal,\n _a[exports.PipsType.LargeValue] = options.cssClasses.valueLarge,\n _a[exports.PipsType.SmallValue] = options.cssClasses.valueSub,\n _a);\n var markerSizeClasses = (_b = {},\n _b[exports.PipsType.None] = \"\",\n _b[exports.PipsType.NoValue] = options.cssClasses.markerNormal,\n _b[exports.PipsType.LargeValue] = options.cssClasses.markerLarge,\n _b[exports.PipsType.SmallValue] = options.cssClasses.markerSub,\n _b);\n var valueOrientationClasses = [options.cssClasses.valueHorizontal, options.cssClasses.valueVertical];\n var markerOrientationClasses = [options.cssClasses.markerHorizontal, options.cssClasses.markerVertical];\n addClass(element, options.cssClasses.pips);\n addClass(element, options.ort === 0 ? options.cssClasses.pipsHorizontal : options.cssClasses.pipsVertical);\n function getClasses(type, source) {\n var a = source === options.cssClasses.value;\n var orientationClasses = a ? valueOrientationClasses : markerOrientationClasses;\n var sizeClasses = a ? valueSizeClasses : markerSizeClasses;\n return source + \" \" + orientationClasses[options.ort] + \" \" + sizeClasses[type];\n }\n function addSpread(offset, value, type) {\n // Apply the filter function, if it is set.\n type = filterFunc ? filterFunc(value, type) : type;\n if (type === exports.PipsType.None) {\n return;\n }\n // Add a marker for every point\n var node = addNodeTo(element, false);\n node.className = getClasses(type, options.cssClasses.marker);\n node.style[options.style] = offset + \"%\";\n // Values are only appended for points marked '1' or '2'.\n if (type > exports.PipsType.NoValue) {\n node = addNodeTo(element, false);\n node.className = getClasses(type, options.cssClasses.value);\n node.setAttribute(\"data-value\", String(value));\n node.style[options.style] = offset + \"%\";\n node.innerHTML = String(formatter.to(value));\n }\n }\n // Append all points.\n Object.keys(spread).forEach(function (offset) {\n addSpread(offset, spread[offset][0], spread[offset][1]);\n });\n return element;\n }\n function removePips() {\n if (scope_Pips) {\n removeElement(scope_Pips);\n scope_Pips = null;\n }\n }\n function pips(pips) {\n // Fix #669\n removePips();\n var spread = generateSpread(pips);\n var filter = pips.filter;\n var format = pips.format || {\n to: function (value) {\n return String(Math.round(value));\n },\n };\n scope_Pips = scope_Target.appendChild(addMarking(spread, filter, format));\n return scope_Pips;\n }\n // Shorthand for base dimensions.\n function baseSize() {\n var rect = scope_Base.getBoundingClientRect();\n var alt = (\"offset\" + [\"Width\", \"Height\"][options.ort]);\n return options.ort === 0 ? rect.width || scope_Base[alt] : rect.height || scope_Base[alt];\n }\n // Handler for attaching events trough a proxy.\n function attachEvent(events, element, callback, data) {\n // This function can be used to 'filter' events to the slider.\n // element is a node, not a nodeList\n var method = function (event) {\n var e = fixEvent(event, data.pageOffset, data.target || element);\n // fixEvent returns false if this event has a different target\n // when handling (multi-) touch events;\n if (!e) {\n return false;\n }\n // doNotReject is passed by all end events to make sure released touches\n // are not rejected, leaving the slider \"stuck\" to the cursor;\n if (isSliderDisabled() && !data.doNotReject) {\n return false;\n }\n // Stop if an active 'tap' transition is taking place.\n if (hasClass(scope_Target, options.cssClasses.tap) && !data.doNotReject) {\n return false;\n }\n // Ignore right or middle clicks on start #454\n if (events === actions.start && e.buttons !== undefined && e.buttons > 1) {\n return false;\n }\n // Ignore right or middle clicks on start #454\n if (data.hover && e.buttons) {\n return false;\n }\n // 'supportsPassive' is only true if a browser also supports touch-action: none in CSS.\n // iOS safari does not, so it doesn't get to benefit from passive scrolling. iOS does support\n // touch-action: manipulation, but that allows panning, which breaks\n // sliders after zooming/on non-responsive pages.\n // See: https://bugs.webkit.org/show_bug.cgi?id=133112\n if (!supportsPassive) {\n e.preventDefault();\n }\n e.calcPoint = e.points[options.ort];\n // Call the event handler with the event [ and additional data ].\n callback(e, data);\n return;\n };\n var methods = [];\n // Bind a closure on the target for every event type.\n events.split(\" \").forEach(function (eventName) {\n element.addEventListener(eventName, method, supportsPassive ? { passive: true } : false);\n methods.push([eventName, method]);\n });\n return methods;\n }\n // Provide a clean event with standardized offset values.\n function fixEvent(e, pageOffset, eventTarget) {\n // Filter the event to register the type, which can be\n // touch, mouse or pointer. Offset changes need to be\n // made on an event specific basis.\n var touch = e.type.indexOf(\"touch\") === 0;\n var mouse = e.type.indexOf(\"mouse\") === 0;\n var pointer = e.type.indexOf(\"pointer\") === 0;\n var x = 0;\n var y = 0;\n // IE10 implemented pointer events with a prefix;\n if (e.type.indexOf(\"MSPointer\") === 0) {\n pointer = true;\n }\n // Erroneous events seem to be passed in occasionally on iOS/iPadOS after user finishes interacting with\n // the slider. They appear to be of type MouseEvent, yet they don't have usual properties set. Ignore\n // events that have no touches or buttons associated with them. (#1057, #1079, #1095)\n if (e.type === \"mousedown\" && !e.buttons && !e.touches) {\n return false;\n }\n // The only thing one handle should be concerned about is the touches that originated on top of it.\n if (touch) {\n // Returns true if a touch originated on the target.\n var isTouchOnTarget = function (checkTouch) {\n var target = checkTouch.target;\n return (target === eventTarget ||\n eventTarget.contains(target) ||\n (e.composed && e.composedPath().shift() === eventTarget));\n };\n // In the case of touchstart events, we need to make sure there is still no more than one\n // touch on the target so we look amongst all touches.\n if (e.type === \"touchstart\") {\n var targetTouches = Array.prototype.filter.call(e.touches, isTouchOnTarget);\n // Do not support more than one touch per handle.\n if (targetTouches.length > 1) {\n return false;\n }\n x = targetTouches[0].pageX;\n y = targetTouches[0].pageY;\n }\n else {\n // In the other cases, find on changedTouches is enough.\n var targetTouch = Array.prototype.find.call(e.changedTouches, isTouchOnTarget);\n // Cancel if the target touch has not moved.\n if (!targetTouch) {\n return false;\n }\n x = targetTouch.pageX;\n y = targetTouch.pageY;\n }\n }\n pageOffset = pageOffset || getPageOffset(scope_Document);\n if (mouse || pointer) {\n x = e.clientX + pageOffset.x;\n y = e.clientY + pageOffset.y;\n }\n e.pageOffset = pageOffset;\n e.points = [x, y];\n e.cursor = mouse || pointer; // Fix #435\n return e;\n }\n // Translate a coordinate in the document to a percentage on the slider\n function calcPointToPercentage(calcPoint) {\n var location = calcPoint - offset(scope_Base, options.ort);\n var proposal = (location * 100) / baseSize();\n // Clamp proposal between 0% and 100%\n // Out-of-bound coordinates may occur when .noUi-base pseudo-elements\n // are used (e.g. contained handles feature)\n proposal = limit(proposal);\n return options.dir ? 100 - proposal : proposal;\n }\n // Find handle closest to a certain percentage on the slider\n function getClosestHandle(clickedPosition) {\n var smallestDifference = 100;\n var handleNumber = false;\n scope_Handles.forEach(function (handle, index) {\n // Disabled handles are ignored\n if (isHandleDisabled(index)) {\n return;\n }\n var handlePosition = scope_Locations[index];\n var differenceWithThisHandle = Math.abs(handlePosition - clickedPosition);\n // Initial state\n var clickAtEdge = differenceWithThisHandle === 100 && smallestDifference === 100;\n // Difference with this handle is smaller than the previously checked handle\n var isCloser = differenceWithThisHandle < smallestDifference;\n var isCloserAfter = differenceWithThisHandle <= smallestDifference && clickedPosition > handlePosition;\n if (isCloser || isCloserAfter || clickAtEdge) {\n handleNumber = index;\n smallestDifference = differenceWithThisHandle;\n }\n });\n return handleNumber;\n }\n // Fire 'end' when a mouse or pen leaves the document.\n function documentLeave(event, data) {\n if (event.type === \"mouseout\" &&\n event.target.nodeName === \"HTML\" &&\n event.relatedTarget === null) {\n eventEnd(event, data);\n }\n }\n // Handle movement on document for handle and range drag.\n function eventMove(event, data) {\n // Fix #498\n // Check value of .buttons in 'start' to work around a bug in IE10 mobile (data.buttonsProperty).\n // https://connect.microsoft.com/IE/feedback/details/927005/mobile-ie10-windows-phone-buttons-property-of-pointermove-event-always-zero\n // IE9 has .buttons and .which zero on mousemove.\n // Firefox breaks the spec MDN defines.\n if (navigator.appVersion.indexOf(\"MSIE 9\") === -1 && event.buttons === 0 && data.buttonsProperty !== 0) {\n return eventEnd(event, data);\n }\n // Check if we are moving up or down\n var movement = (options.dir ? -1 : 1) * (event.calcPoint - data.startCalcPoint);\n // Convert the movement into a percentage of the slider width/height\n var proposal = (movement * 100) / data.baseSize;\n moveHandles(movement > 0, proposal, data.locations, data.handleNumbers, data.connect);\n }\n // Unbind move events on document, call callbacks.\n function eventEnd(event, data) {\n // The handle is no longer active, so remove the class.\n if (data.handle) {\n removeClass(data.handle, options.cssClasses.active);\n scope_ActiveHandlesCount -= 1;\n }\n // Unbind the move and end events, which are added on 'start'.\n data.listeners.forEach(function (c) {\n scope_DocumentElement.removeEventListener(c[0], c[1]);\n });\n if (scope_ActiveHandlesCount === 0) {\n // Remove dragging class.\n removeClass(scope_Target, options.cssClasses.drag);\n setZindex();\n // Remove cursor styles and text-selection events bound to the body.\n if (event.cursor) {\n scope_Body.style.cursor = \"\";\n scope_Body.removeEventListener(\"selectstart\", preventDefault);\n }\n }\n if (options.events.smoothSteps) {\n data.handleNumbers.forEach(function (handleNumber) {\n setHandle(handleNumber, scope_Locations[handleNumber], true, true, false, false);\n });\n data.handleNumbers.forEach(function (handleNumber) {\n fireEvent(\"update\", handleNumber);\n });\n }\n data.handleNumbers.forEach(function (handleNumber) {\n fireEvent(\"change\", handleNumber);\n fireEvent(\"set\", handleNumber);\n fireEvent(\"end\", handleNumber);\n });\n }\n // Bind move events on document.\n function eventStart(event, data) {\n // Ignore event if any handle is disabled\n if (data.handleNumbers.some(isHandleDisabled)) {\n return;\n }\n var handle;\n if (data.handleNumbers.length === 1) {\n var handleOrigin = scope_Handles[data.handleNumbers[0]];\n handle = handleOrigin.children[0];\n scope_ActiveHandlesCount += 1;\n // Mark the handle as 'active' so it can be styled.\n addClass(handle, options.cssClasses.active);\n }\n // A drag should never propagate up to the 'tap' event.\n event.stopPropagation();\n // Record the event listeners.\n var listeners = [];\n // Attach the move and end events.\n var moveEvent = attachEvent(actions.move, scope_DocumentElement, eventMove, {\n // The event target has changed so we need to propagate the original one so that we keep\n // relying on it to extract target touches.\n target: event.target,\n handle: handle,\n connect: data.connect,\n listeners: listeners,\n startCalcPoint: event.calcPoint,\n baseSize: baseSize(),\n pageOffset: event.pageOffset,\n handleNumbers: data.handleNumbers,\n buttonsProperty: event.buttons,\n locations: scope_Locations.slice(),\n });\n var endEvent = attachEvent(actions.end, scope_DocumentElement, eventEnd, {\n target: event.target,\n handle: handle,\n listeners: listeners,\n doNotReject: true,\n handleNumbers: data.handleNumbers,\n });\n var outEvent = attachEvent(\"mouseout\", scope_DocumentElement, documentLeave, {\n target: event.target,\n handle: handle,\n listeners: listeners,\n doNotReject: true,\n handleNumbers: data.handleNumbers,\n });\n // We want to make sure we pushed the listeners in the listener list rather than creating\n // a new one as it has already been passed to the event handlers.\n listeners.push.apply(listeners, moveEvent.concat(endEvent, outEvent));\n // Text selection isn't an issue on touch devices,\n // so adding cursor styles can be skipped.\n if (event.cursor) {\n // Prevent the 'I' cursor and extend the range-drag cursor.\n scope_Body.style.cursor = getComputedStyle(event.target).cursor;\n // Mark the target with a dragging state.\n if (scope_Handles.length > 1) {\n addClass(scope_Target, options.cssClasses.drag);\n }\n // Prevent text selection when dragging the handles.\n // In noUiSlider <= 9.2.0, this was handled by calling preventDefault on mouse/touch start/move,\n // which is scroll blocking. The selectstart event is supported by FireFox starting from version 52,\n // meaning the only holdout is iOS Safari. This doesn't matter: text selection isn't triggered there.\n // The 'cursor' flag is false.\n // See: http://caniuse.com/#search=selectstart\n scope_Body.addEventListener(\"selectstart\", preventDefault, false);\n }\n data.handleNumbers.forEach(function (handleNumber) {\n fireEvent(\"start\", handleNumber);\n });\n }\n // Move closest handle to tapped location.\n function eventTap(event) {\n // The tap event shouldn't propagate up\n event.stopPropagation();\n var proposal = calcPointToPercentage(event.calcPoint);\n var handleNumber = getClosestHandle(proposal);\n // Tackle the case that all handles are 'disabled'.\n if (handleNumber === false) {\n return;\n }\n // Flag the slider as it is now in a transitional state.\n // Transition takes a configurable amount of ms (default 300). Re-enable the slider after that.\n if (!options.events.snap) {\n addClassFor(scope_Target, options.cssClasses.tap, options.animationDuration);\n }\n setHandle(handleNumber, proposal, true, true);\n setZindex();\n fireEvent(\"slide\", handleNumber, true);\n fireEvent(\"update\", handleNumber, true);\n if (!options.events.snap) {\n fireEvent(\"change\", handleNumber, true);\n fireEvent(\"set\", handleNumber, true);\n }\n else {\n eventStart(event, { handleNumbers: [handleNumber] });\n }\n }\n // Fires a 'hover' event for a hovered mouse/pen position.\n function eventHover(event) {\n var proposal = calcPointToPercentage(event.calcPoint);\n var to = scope_Spectrum.getStep(proposal);\n var value = scope_Spectrum.fromStepping(to);\n Object.keys(scope_Events).forEach(function (targetEvent) {\n if (\"hover\" === targetEvent.split(\".\")[0]) {\n scope_Events[targetEvent].forEach(function (callback) {\n callback.call(scope_Self, value);\n });\n }\n });\n }\n // Handles keydown on focused handles\n // Don't move the document when pressing arrow keys on focused handles\n function eventKeydown(event, handleNumber) {\n if (isSliderDisabled() || isHandleDisabled(handleNumber)) {\n return false;\n }\n var horizontalKeys = [\"Left\", \"Right\"];\n var verticalKeys = [\"Down\", \"Up\"];\n var largeStepKeys = [\"PageDown\", \"PageUp\"];\n var edgeKeys = [\"Home\", \"End\"];\n if (options.dir && !options.ort) {\n // On an right-to-left slider, the left and right keys act inverted\n horizontalKeys.reverse();\n }\n else if (options.ort && !options.dir) {\n // On a top-to-bottom slider, the up and down keys act inverted\n verticalKeys.reverse();\n largeStepKeys.reverse();\n }\n // Strip \"Arrow\" for IE compatibility. https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/key\n var key = event.key.replace(\"Arrow\", \"\");\n var isLargeDown = key === largeStepKeys[0];\n var isLargeUp = key === largeStepKeys[1];\n var isDown = key === verticalKeys[0] || key === horizontalKeys[0] || isLargeDown;\n var isUp = key === verticalKeys[1] || key === horizontalKeys[1] || isLargeUp;\n var isMin = key === edgeKeys[0];\n var isMax = key === edgeKeys[1];\n if (!isDown && !isUp && !isMin && !isMax) {\n return true;\n }\n event.preventDefault();\n var to;\n if (isUp || isDown) {\n var direction = isDown ? 0 : 1;\n var steps = getNextStepsForHandle(handleNumber);\n var step = steps[direction];\n // At the edge of a slider, do nothing\n if (step === null) {\n return false;\n }\n // No step set, use the default of 10% of the sub-range\n if (step === false) {\n step = scope_Spectrum.getDefaultStep(scope_Locations[handleNumber], isDown, options.keyboardDefaultStep);\n }\n if (isLargeUp || isLargeDown) {\n step *= options.keyboardPageMultiplier;\n }\n else {\n step *= options.keyboardMultiplier;\n }\n // Step over zero-length ranges (#948);\n step = Math.max(step, 0.0000001);\n // Decrement for down steps\n step = (isDown ? -1 : 1) * step;\n to = scope_Values[handleNumber] + step;\n }\n else if (isMax) {\n // End key\n to = options.spectrum.xVal[options.spectrum.xVal.length - 1];\n }\n else {\n // Home key\n to = options.spectrum.xVal[0];\n }\n setHandle(handleNumber, scope_Spectrum.toStepping(to), true, true);\n fireEvent(\"slide\", handleNumber);\n fireEvent(\"update\", handleNumber);\n fireEvent(\"change\", handleNumber);\n fireEvent(\"set\", handleNumber);\n return false;\n }\n // Attach events to several slider parts.\n function bindSliderEvents(behaviour) {\n // Attach the standard drag event to the handles.\n if (!behaviour.fixed) {\n scope_Handles.forEach(function (handle, index) {\n // These events are only bound to the visual handle\n // element, not the 'real' origin element.\n attachEvent(actions.start, handle.children[0], eventStart, {\n handleNumbers: [index],\n });\n });\n }\n // Attach the tap event to the slider base.\n if (behaviour.tap) {\n attachEvent(actions.start, scope_Base, eventTap, {});\n }\n // Fire hover events\n if (behaviour.hover) {\n attachEvent(actions.move, scope_Base, eventHover, {\n hover: true,\n });\n }\n // Make the range draggable.\n if (behaviour.drag) {\n scope_Connects.forEach(function (connect, index) {\n if (connect === false || index === 0 || index === scope_Connects.length - 1) {\n return;\n }\n var handleBefore = scope_Handles[index - 1];\n var handleAfter = scope_Handles[index];\n var eventHolders = [connect];\n var handlesToDrag = [handleBefore, handleAfter];\n var handleNumbersToDrag = [index - 1, index];\n addClass(connect, options.cssClasses.draggable);\n // When the range is fixed, the entire range can\n // be dragged by the handles. The handle in the first\n // origin will propagate the start event upward,\n // but it needs to be bound manually on the other.\n if (behaviour.fixed) {\n eventHolders.push(handleBefore.children[0]);\n eventHolders.push(handleAfter.children[0]);\n }\n if (behaviour.dragAll) {\n handlesToDrag = scope_Handles;\n handleNumbersToDrag = scope_HandleNumbers;\n }\n eventHolders.forEach(function (eventHolder) {\n attachEvent(actions.start, eventHolder, eventStart, {\n handles: handlesToDrag,\n handleNumbers: handleNumbersToDrag,\n connect: connect,\n });\n });\n });\n }\n }\n // Attach an event to this slider, possibly including a namespace\n function bindEvent(namespacedEvent, callback) {\n scope_Events[namespacedEvent] = scope_Events[namespacedEvent] || [];\n scope_Events[namespacedEvent].push(callback);\n // If the event bound is 'update,' fire it immediately for all handles.\n if (namespacedEvent.split(\".\")[0] === \"update\") {\n scope_Handles.forEach(function (a, index) {\n fireEvent(\"update\", index);\n });\n }\n }\n function isInternalNamespace(namespace) {\n return namespace === INTERNAL_EVENT_NS.aria || namespace === INTERNAL_EVENT_NS.tooltips;\n }\n // Undo attachment of event\n function removeEvent(namespacedEvent) {\n var event = namespacedEvent && namespacedEvent.split(\".\")[0];\n var namespace = event ? namespacedEvent.substring(event.length) : namespacedEvent;\n Object.keys(scope_Events).forEach(function (bind) {\n var tEvent = bind.split(\".\")[0];\n var tNamespace = bind.substring(tEvent.length);\n if ((!event || event === tEvent) && (!namespace || namespace === tNamespace)) {\n // only delete protected internal event if intentional\n if (!isInternalNamespace(tNamespace) || namespace === tNamespace) {\n delete scope_Events[bind];\n }\n }\n });\n }\n // External event handling\n function fireEvent(eventName, handleNumber, tap) {\n Object.keys(scope_Events).forEach(function (targetEvent) {\n var eventType = targetEvent.split(\".\")[0];\n if (eventName === eventType) {\n scope_Events[targetEvent].forEach(function (callback) {\n callback.call(\n // Use the slider public API as the scope ('this')\n scope_Self, \n // Return values as array, so arg_1[arg_2] is always valid.\n scope_Values.map(options.format.to), \n // Handle index, 0 or 1\n handleNumber, \n // Un-formatted slider values\n scope_Values.slice(), \n // Event is fired by tap, true or false\n tap || false, \n // Left offset of the handle, in relation to the slider\n scope_Locations.slice(), \n // add the slider public API to an accessible parameter when this is unavailable\n scope_Self);\n });\n }\n });\n }\n // Split out the handle positioning logic so the Move event can use it, too\n function checkHandlePosition(reference, handleNumber, to, lookBackward, lookForward, getValue, smoothSteps) {\n var distance;\n // For sliders with multiple handles, limit movement to the other handle.\n // Apply the margin option by adding it to the handle positions.\n if (scope_Handles.length > 1 && !options.events.unconstrained) {\n if (lookBackward && handleNumber > 0) {\n distance = scope_Spectrum.getAbsoluteDistance(reference[handleNumber - 1], options.margin, false);\n to = Math.max(to, distance);\n }\n if (lookForward && handleNumber < scope_Handles.length - 1) {\n distance = scope_Spectrum.getAbsoluteDistance(reference[handleNumber + 1], options.margin, true);\n to = Math.min(to, distance);\n }\n }\n // The limit option has the opposite effect, limiting handles to a\n // maximum distance from another. Limit must be > 0, as otherwise\n // handles would be unmovable.\n if (scope_Handles.length > 1 && options.limit) {\n if (lookBackward && handleNumber > 0) {\n distance = scope_Spectrum.getAbsoluteDistance(reference[handleNumber - 1], options.limit, false);\n to = Math.min(to, distance);\n }\n if (lookForward && handleNumber < scope_Handles.length - 1) {\n distance = scope_Spectrum.getAbsoluteDistance(reference[handleNumber + 1], options.limit, true);\n to = Math.max(to, distance);\n }\n }\n // The padding option keeps the handles a certain distance from the\n // edges of the slider. Padding must be > 0.\n if (options.padding) {\n if (handleNumber === 0) {\n distance = scope_Spectrum.getAbsoluteDistance(0, options.padding[0], false);\n to = Math.max(to, distance);\n }\n if (handleNumber === scope_Handles.length - 1) {\n distance = scope_Spectrum.getAbsoluteDistance(100, options.padding[1], true);\n to = Math.min(to, distance);\n }\n }\n if (!smoothSteps) {\n to = scope_Spectrum.getStep(to);\n }\n // Limit percentage to the 0 - 100 range\n to = limit(to);\n // Return false if handle can't move\n if (to === reference[handleNumber] && !getValue) {\n return false;\n }\n return to;\n }\n // Uses slider orientation to create CSS rules. a = base value;\n function inRuleOrder(v, a) {\n var o = options.ort;\n return (o ? a : v) + \", \" + (o ? v : a);\n }\n // Moves handle(s) by a percentage\n // (bool, % to move, [% where handle started, ...], [index in scope_Handles, ...])\n function moveHandles(upward, proposal, locations, handleNumbers, connect) {\n var proposals = locations.slice();\n // Store first handle now, so we still have it in case handleNumbers is reversed\n var firstHandle = handleNumbers[0];\n var smoothSteps = options.events.smoothSteps;\n var b = [!upward, upward];\n var f = [upward, !upward];\n // Copy handleNumbers so we don't change the dataset\n handleNumbers = handleNumbers.slice();\n // Check to see which handle is 'leading'.\n // If that one can't move the second can't either.\n if (upward) {\n handleNumbers.reverse();\n }\n // Step 1: get the maximum percentage that any of the handles can move\n if (handleNumbers.length > 1) {\n handleNumbers.forEach(function (handleNumber, o) {\n var to = checkHandlePosition(proposals, handleNumber, proposals[handleNumber] + proposal, b[o], f[o], false, smoothSteps);\n // Stop if one of the handles can't move.\n if (to === false) {\n proposal = 0;\n }\n else {\n proposal = to - proposals[handleNumber];\n proposals[handleNumber] = to;\n }\n });\n }\n // If using one handle, check backward AND forward\n else {\n b = f = [true];\n }\n var state = false;\n // Step 2: Try to set the handles with the found percentage\n handleNumbers.forEach(function (handleNumber, o) {\n state =\n setHandle(handleNumber, locations[handleNumber] + proposal, b[o], f[o], false, smoothSteps) || state;\n });\n // Step 3: If a handle moved, fire events\n if (state) {\n handleNumbers.forEach(function (handleNumber) {\n fireEvent(\"update\", handleNumber);\n fireEvent(\"slide\", handleNumber);\n });\n // If target is a connect, then fire drag event\n if (connect != undefined) {\n fireEvent(\"drag\", firstHandle);\n }\n }\n }\n // Takes a base value and an offset. This offset is used for the connect bar size.\n // In the initial design for this feature, the origin element was 1% wide.\n // Unfortunately, a rounding bug in Chrome makes it impossible to implement this feature\n // in this manner: https://bugs.chromium.org/p/chromium/issues/detail?id=798223\n function transformDirection(a, b) {\n return options.dir ? 100 - a - b : a;\n }\n // Updates scope_Locations and scope_Values, updates visual state\n function updateHandlePosition(handleNumber, to) {\n // Update locations.\n scope_Locations[handleNumber] = to;\n // Convert the value to the slider stepping/range.\n scope_Values[handleNumber] = scope_Spectrum.fromStepping(to);\n var translation = transformDirection(to, 0) - scope_DirOffset;\n var translateRule = \"translate(\" + inRuleOrder(translation + \"%\", \"0\") + \")\";\n scope_Handles[handleNumber].style[options.transformRule] = translateRule;\n updateConnect(handleNumber);\n updateConnect(handleNumber + 1);\n }\n // Handles before the slider middle are stacked later = higher,\n // Handles after the middle later is lower\n // [[7] [8] .......... | .......... [5] [4]\n function setZindex() {\n scope_HandleNumbers.forEach(function (handleNumber) {\n var dir = scope_Locations[handleNumber] > 50 ? -1 : 1;\n var zIndex = 3 + (scope_Handles.length + dir * handleNumber);\n scope_Handles[handleNumber].style.zIndex = String(zIndex);\n });\n }\n // Test suggested values and apply margin, step.\n // if exactInput is true, don't run checkHandlePosition, then the handle can be placed in between steps (#436)\n function setHandle(handleNumber, to, lookBackward, lookForward, exactInput, smoothSteps) {\n if (!exactInput) {\n to = checkHandlePosition(scope_Locations, handleNumber, to, lookBackward, lookForward, false, smoothSteps);\n }\n if (to === false) {\n return false;\n }\n updateHandlePosition(handleNumber, to);\n return true;\n }\n // Updates style attribute for connect nodes\n function updateConnect(index) {\n // Skip connects set to false\n if (!scope_Connects[index]) {\n return;\n }\n var l = 0;\n var h = 100;\n if (index !== 0) {\n l = scope_Locations[index - 1];\n }\n if (index !== scope_Connects.length - 1) {\n h = scope_Locations[index];\n }\n // We use two rules:\n // 'translate' to change the left/top offset;\n // 'scale' to change the width of the element;\n // As the element has a width of 100%, a translation of 100% is equal to 100% of the parent (.noUi-base)\n var connectWidth = h - l;\n var translateRule = \"translate(\" + inRuleOrder(transformDirection(l, connectWidth) + \"%\", \"0\") + \")\";\n var scaleRule = \"scale(\" + inRuleOrder(connectWidth / 100, \"1\") + \")\";\n scope_Connects[index].style[options.transformRule] =\n translateRule + \" \" + scaleRule;\n }\n // Parses value passed to .set method. Returns current value if not parse-able.\n function resolveToValue(to, handleNumber) {\n // Setting with null indicates an 'ignore'.\n // Inputting 'false' is invalid.\n if (to === null || to === false || to === undefined) {\n return scope_Locations[handleNumber];\n }\n // If a formatted number was passed, attempt to decode it.\n if (typeof to === \"number\") {\n to = String(to);\n }\n to = options.format.from(to);\n if (to !== false) {\n to = scope_Spectrum.toStepping(to);\n }\n // If parsing the number failed, use the current value.\n if (to === false || isNaN(to)) {\n return scope_Locations[handleNumber];\n }\n return to;\n }\n // Set the slider value.\n function valueSet(input, fireSetEvent, exactInput) {\n var values = asArray(input);\n var isInit = scope_Locations[0] === undefined;\n // Event fires by default\n fireSetEvent = fireSetEvent === undefined ? true : fireSetEvent;\n // Animation is optional.\n // Make sure the initial values were set before using animated placement.\n if (options.animate && !isInit) {\n addClassFor(scope_Target, options.cssClasses.tap, options.animationDuration);\n }\n // First pass, without lookAhead but with lookBackward. Values are set from left to right.\n scope_HandleNumbers.forEach(function (handleNumber) {\n setHandle(handleNumber, resolveToValue(values[handleNumber], handleNumber), true, false, exactInput);\n });\n var i = scope_HandleNumbers.length === 1 ? 0 : 1;\n // Spread handles evenly across the slider if the range has no size (min=max)\n if (isInit && scope_Spectrum.hasNoSize()) {\n exactInput = true;\n scope_Locations[0] = 0;\n if (scope_HandleNumbers.length > 1) {\n var space_1 = 100 / (scope_HandleNumbers.length - 1);\n scope_HandleNumbers.forEach(function (handleNumber) {\n scope_Locations[handleNumber] = handleNumber * space_1;\n });\n }\n }\n // Secondary passes. Now that all base values are set, apply constraints.\n // Iterate all handles to ensure constraints are applied for the entire slider (Issue #1009)\n for (; i < scope_HandleNumbers.length; ++i) {\n scope_HandleNumbers.forEach(function (handleNumber) {\n setHandle(handleNumber, scope_Locations[handleNumber], true, true, exactInput);\n });\n }\n setZindex();\n scope_HandleNumbers.forEach(function (handleNumber) {\n fireEvent(\"update\", handleNumber);\n // Fire the event only for handles that received a new value, as per #579\n if (values[handleNumber] !== null && fireSetEvent) {\n fireEvent(\"set\", handleNumber);\n }\n });\n }\n // Reset slider to initial values\n function valueReset(fireSetEvent) {\n valueSet(options.start, fireSetEvent);\n }\n // Set value for a single handle\n function valueSetHandle(handleNumber, value, fireSetEvent, exactInput) {\n // Ensure numeric input\n handleNumber = Number(handleNumber);\n if (!(handleNumber >= 0 && handleNumber < scope_HandleNumbers.length)) {\n throw new Error(\"noUiSlider: invalid handle number, got: \" + handleNumber);\n }\n // Look both backward and forward, since we don't want this handle to \"push\" other handles (#960);\n // The exactInput argument can be used to ignore slider stepping (#436)\n setHandle(handleNumber, resolveToValue(value, handleNumber), true, true, exactInput);\n fireEvent(\"update\", handleNumber);\n if (fireSetEvent) {\n fireEvent(\"set\", handleNumber);\n }\n }\n // Get the slider value.\n function valueGet(unencoded) {\n if (unencoded === void 0) { unencoded = false; }\n if (unencoded) {\n // return a copy of the raw values\n return scope_Values.length === 1 ? scope_Values[0] : scope_Values.slice(0);\n }\n var values = scope_Values.map(options.format.to);\n // If only one handle is used, return a single value.\n if (values.length === 1) {\n return values[0];\n }\n return values;\n }\n // Removes classes from the root and empties it.\n function destroy() {\n // remove protected internal listeners\n removeEvent(INTERNAL_EVENT_NS.aria);\n removeEvent(INTERNAL_EVENT_NS.tooltips);\n Object.keys(options.cssClasses).forEach(function (key) {\n removeClass(scope_Target, options.cssClasses[key]);\n });\n while (scope_Target.firstChild) {\n scope_Target.removeChild(scope_Target.firstChild);\n }\n delete scope_Target.noUiSlider;\n }\n function getNextStepsForHandle(handleNumber) {\n var location = scope_Locations[handleNumber];\n var nearbySteps = scope_Spectrum.getNearbySteps(location);\n var value = scope_Values[handleNumber];\n var increment = nearbySteps.thisStep.step;\n var decrement = null;\n // If snapped, directly use defined step value\n if (options.snap) {\n return [\n value - nearbySteps.stepBefore.startValue || null,\n nearbySteps.stepAfter.startValue - value || null,\n ];\n }\n // If the next value in this step moves into the next step,\n // the increment is the start of the next step - the current value\n if (increment !== false) {\n if (value + increment > nearbySteps.stepAfter.startValue) {\n increment = nearbySteps.stepAfter.startValue - value;\n }\n }\n // If the value is beyond the starting point\n if (value > nearbySteps.thisStep.startValue) {\n decrement = nearbySteps.thisStep.step;\n }\n else if (nearbySteps.stepBefore.step === false) {\n decrement = false;\n }\n // If a handle is at the start of a step, it always steps back into the previous step first\n else {\n decrement = value - nearbySteps.stepBefore.highestStep;\n }\n // Now, if at the slider edges, there is no in/decrement\n if (location === 100) {\n increment = null;\n }\n else if (location === 0) {\n decrement = null;\n }\n // As per #391, the comparison for the decrement step can have some rounding issues.\n var stepDecimals = scope_Spectrum.countStepDecimals();\n // Round per #391\n if (increment !== null && increment !== false) {\n increment = Number(increment.toFixed(stepDecimals));\n }\n if (decrement !== null && decrement !== false) {\n decrement = Number(decrement.toFixed(stepDecimals));\n }\n return [decrement, increment];\n }\n // Get the current step size for the slider.\n function getNextSteps() {\n return scope_HandleNumbers.map(getNextStepsForHandle);\n }\n // Updatable: margin, limit, padding, step, range, animate, snap\n function updateOptions(optionsToUpdate, fireSetEvent) {\n // Spectrum is created using the range, snap, direction and step options.\n // 'snap' and 'step' can be updated.\n // If 'snap' and 'step' are not passed, they should remain unchanged.\n var v = valueGet();\n var updateAble = [\n \"margin\",\n \"limit\",\n \"padding\",\n \"range\",\n \"animate\",\n \"snap\",\n \"step\",\n \"format\",\n \"pips\",\n \"tooltips\",\n ];\n // Only change options that we're actually passed to update.\n updateAble.forEach(function (name) {\n // Check for undefined. null removes the value.\n if (optionsToUpdate[name] !== undefined) {\n originalOptions[name] = optionsToUpdate[name];\n }\n });\n var newOptions = testOptions(originalOptions);\n // Load new options into the slider state\n updateAble.forEach(function (name) {\n if (optionsToUpdate[name] !== undefined) {\n options[name] = newOptions[name];\n }\n });\n scope_Spectrum = newOptions.spectrum;\n // Limit, margin and padding depend on the spectrum but are stored outside of it. (#677)\n options.margin = newOptions.margin;\n options.limit = newOptions.limit;\n options.padding = newOptions.padding;\n // Update pips, removes existing.\n if (options.pips) {\n pips(options.pips);\n }\n else {\n removePips();\n }\n // Update tooltips, removes existing.\n if (options.tooltips) {\n tooltips();\n }\n else {\n removeTooltips();\n }\n // Invalidate the current positioning so valueSet forces an update.\n scope_Locations = [];\n valueSet(isSet(optionsToUpdate.start) ? optionsToUpdate.start : v, fireSetEvent);\n }\n // Initialization steps\n function setupSlider() {\n // Create the base element, initialize HTML and set classes.\n // Add handles and connect elements.\n scope_Base = addSlider(scope_Target);\n addElements(options.connect, scope_Base);\n // Attach user events.\n bindSliderEvents(options.events);\n // Use the public value method to set the start values.\n valueSet(options.start);\n if (options.pips) {\n pips(options.pips);\n }\n if (options.tooltips) {\n tooltips();\n }\n aria();\n }\n setupSlider();\n var scope_Self = {\n destroy: destroy,\n steps: getNextSteps,\n on: bindEvent,\n off: removeEvent,\n get: valueGet,\n set: valueSet,\n setHandle: valueSetHandle,\n reset: valueReset,\n // Exposed for unit testing, don't use this in your application.\n __moveHandles: function (upward, proposal, handleNumbers) {\n moveHandles(upward, proposal, scope_Locations, handleNumbers);\n },\n options: originalOptions,\n updateOptions: updateOptions,\n target: scope_Target,\n removePips: removePips,\n removeTooltips: removeTooltips,\n getPositions: function () {\n return scope_Locations.slice();\n },\n getTooltips: function () {\n return scope_Tooltips;\n },\n getOrigins: function () {\n return scope_Handles;\n },\n pips: pips, // Issue #594\n };\n return scope_Self;\n }\n // Run the standard initializer\n function initialize(target, originalOptions) {\n if (!target || !target.nodeName) {\n throw new Error(\"noUiSlider: create requires a single element, got: \" + target);\n }\n // Throw an error if the slider was already initialized.\n if (target.noUiSlider) {\n throw new Error(\"noUiSlider: Slider was already initialized.\");\n }\n // Test the options and create the slider environment;\n var options = testOptions(originalOptions);\n var api = scope(target, options, originalOptions);\n target.noUiSlider = api;\n return api;\n }\n var nouislider = {\n // Exposed for unit testing, don't use this in your application.\n __spectrum: Spectrum,\n // A reference to the default classes, allows global changes.\n // Use the cssClasses option for changes to one slider.\n cssClasses: cssClasses,\n create: initialize,\n };\n\n exports.create = initialize;\n exports.cssClasses = cssClasses;\n exports[\"default\"] = nouislider;\n\n Object.defineProperty(exports, '__esModule', { value: true });\n\n}));\n","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SplitLayout.vue?vue&type=style&index=0&id=2254ac6c&scoped=true&lang=css&\"","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./GenerateArrayDialog.vue?vue&type=style&index=0&id=c6cad3e2&lang=scss&scoped=true&\"","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ResolutionToolbar.vue?vue&type=style&index=0&id=17cb0ead&lang=scss&scoped=true&\"","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ConnectionPropertyDrawer.vue?vue&type=style&index=0&id=ad2fe0a0&lang=scss&scoped=true&\"","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./LayerToolbar.vue?vue&type=style&index=0&id=088f6ffc&lang=scss&scoped=true&\"","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ImportDXFDialog.vue?vue&type=style&index=0&id=89ff16ba&lang=scss&scoped=true&\"","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./HelpDialog.vue?vue&type=style&index=0&id=20543ec0&lang=scss&scoped=true&\"","module.exports = __webpack_public_path__ + \"img/CHANNEL.6ac8d4e3.png\";","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Visualiser.vue?vue&type=style&index=0&id=c5eef416&lang=css&scoped=true&\"","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./EditBorderDialog.vue?vue&type=style&index=0&id=180b9f39&lang=scss&scoped=true&\"","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ChangeAllDialog.vue?vue&type=style&index=0&id=41dfe81a&lang=scss&scoped=true&\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PropertyDrawer.vue?vue&type=style&index=0&id=420c4732&lang=scss&scoped=true&\"","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ComponentContextMenu.vue?vue&type=style&index=0&id=94aacf7a&lang=scss&scoped=true&\"","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./MoveDialog.vue?vue&type=style&index=0&id=151188cb&lang=scss&scoped=true&\"","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ManufacturingPanel.vue?vue&type=style&index=0&id=58399cfc&lang=scss&scoped=true&\"","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ComponentToolBar.vue?vue&type=style&index=0&id=690cc93d&lang=scss&scoped=true&\"","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ConnectionContextMenu.vue?vue&type=style&index=0&id=7fd25946&lang=scss&scoped=true&\"","export type Point = [number, number];\n\nexport type Segment = [Point, Point];\n\nexport type ParamsInterchangeType = {[key: string]: any};\n\nexport type ToolPaperObject = paper.CompoundPath | paper.Path | paper.PointText | paper.PathItem;\n\nexport type InterchangeV1_2 = {\n name: string;\n params: ParamsInterchangeType;\n layers: Array;\n groups: Array;\n components: Array;\n connections: Array;\n valves: Array;\n version: string;\n renderLayers: Array;\n features: Array;\n};\n\nexport enum LogicalLayerType {\n FLOW = \"FLOW\",\n CONTROL = \"CONTROL\",\n INTEGRATION = \"INTEGRATION\"\n}\n\nexport enum ValveType {\n NORMALLY_OPEN = \"NORMALLY_OPEN\",\n NORMALLY_CLOSED = \"NORMALLY_CLOSED\",\n}\n\nexport enum GeometricOperationType{\n UNION = \"UNION\",\n INTERSECTION = \"INTERSECTION\",\n DIFFERENCE = \"SUBTRACTION\",\n XOR = \"XOR\",\n}\n\nexport type DeviceInterchangeV1 = {\n name: string;\n params: ParamsInterchangeType;\n layers: Array;\n groups: Array;\n components: Array;\n connections: Array;\n valves: Array;\n version: string;\n};\n\nexport type DeviceInterchangeV1_1 = {\n name: string;\n params: ParamsInterchangeType;\n layers: Array;\n groups: Array;\n components: Array;\n connections: Array;\n version: string;\n};\n\nexport type ComponentInterchangeV1 = {\n id: string;\n name: string;\n entity: string;\n params: ParamsInterchangeType;\n \"x-span\": number;\n \"y-span\": number;\n ports: Array;\n layers: Array;\n};\n\nexport type ConnectionInterchangeV1_2 = {\n id: string;\n name: string;\n entity: string;\n source: ConnectionTargetInterchangeV1;\n sinks: Array;\n paths: Array;\n params: ParamsInterchangeType;\n layer: string;\n};\n\nexport type ValveInterchangeV1_2 = {\n componentid: string;\n connectionid: string;\n type: ValveType;\n params: ParamsInterchangeType;\n}\n\nexport type LayerInterchangeV1 = {\n id: string;\n name: string;\n params: ParamsInterchangeType;\n group: string;\n type: string;\n features: Array;\n};\n\nexport type RenderLayerInterchangeV1_2 = {\n id: string;\n features: Array;\n modellayer: string | null;\n color: string | undefined;\n name: string;\n type: string;\n};\n\nexport type FeatureInterchangeV1_2 = {\n id: string;\n name: string;\n macro: string;\n layerID: string | null;\n referenceID: string | null; // Delete this in the future\n params: ParamsInterchangeType;\n dxfData: any; // 3DuF specific data for raw import/export of DXF objects\n type: string;\n};\n\nexport type GeometryElementInterchangeV1_2 = {\n id: string;\n macro: string;\n params: ParamsInterchangeType;\n geometricOperation: string;\n mgflayerID: string;\n}\n\nexport type ComponentPortInterchangeV1 = {\n x: number;\n y: number;\n label: string;\n layer: string;\n};\n\nexport type ConnectionTargetInterchangeV1 = {\n component: string;\n port: string;\n};\n\nexport type ConnectionPathInterchangeV1_2 = {\n wayPoints: Array;\n source: ConnectionTargetInterchangeV1 | null;\n sink: ConnectionTargetInterchangeV1 | null;\n features: Array;\n};\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-app',{attrs:{\"id\":\"3duf\"}},[_c('LayoutSidebar')],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('div',{attrs:{\"id\":\"view-container\"}},[_c('div',{attrs:{\"id\":\"canvas_block\"}},[_c('canvas',{ref:\"rendingcanvas\",attrs:{\"id\":\"c\",\"tabindex\":\"0\",\"resize\":\"\"}}),_vm._t(\"default\",function(){return [_c('ComponentContextMenu',{ref:\"contextMenu\",attrs:{\"id\":\"contextMenu\"}})]}),_vm._t(\"default\",function(){return [_c('ConnectionContextMenu',{ref:\"contextMenu\",attrs:{\"id\":\"contextMenu\"}})]})],2),_c('div',{attrs:{\"id\":\"renderContainer\"}})]),_c('ResolutionToolbar'),_c('ZoomSlider')],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import ComponentPort from \"../core/componentPort\";\nimport { ToolPaperObject } from \"../core/init\";\nimport paper from \"paper\";\n//import { ManufacturingInfo } from \"../manufacturing/ManufacturingInfo\";\nimport { LogicalLayerType } from \"../core/init\";\nimport {PRIMITIVES_SERVER} from \"../../componentAPI\";\nexport enum PositionToolType {\n FEATURE_POSITION_TOOL = \"positionTool\",\n COMPONENT_POSITION_TOOL = \"componentPositionTool\",\n MULTILAYER_POSITION_TOOL = \"multilayerPositionTool\",\n VALVE_INSERTION_TOOL = \"valveInsertionTool\"\n}\n\nexport default class Template {\n protected __unique: { [key: string]: string } | null = null;\n protected __heritable: { [key: string]: string } | null = null;\n protected __defaults: { [key: string]: number } | null = null;\n protected __minimum: { [key: string]: number } | null = null;\n protected __maximum: { [key: string]: number } | null = null;\n protected __units: { [key: string]: string } | null = null;\n protected __placementTool: string | null = null;\n protected __toolParams: { [key: string]: string } | null = null; // { position: \"position\" };\n protected __featureParams: { [key: string]: string } | null = null;\n protected __targetParams: { [key: string]: string } | null = null;\n protected __mint: string | null = null;\n protected __renderKeys: Array = [\"FLOW\"];\n protected _previewImage: string = \"\";\n protected __zOffsetKeys: { [key: string]: string } | null = null;\n protected __substrateOffset: { [key: string]: string } | null = null;\n protected __childFeatureMacros: Array = []; // Store all the macro names\n \n /**\n *Creates an instance of Template.\n * @memberof Template\n */\n constructor() {\n this.__setupDefinitions();\n }\n\n /**\n * Returns the mint definition for the component definition\n *\n * @readonly\n * @type {string}\n * @memberof Template\n */\n get mint(): string {\n if (this.__mint === null) {\n throw new Error(\"User needs to provide unique MINT string for component type\");\n }\n return this.__mint;\n }\n\n /**\n * Returns the z-offset-key for the given layer type\n *\n * @param {string}\n * @memberof Template\n */\n zOffsetKey(key: string): string {\n if (this.__zOffsetKeys === null) {\n throw new Error(\"zOffsetKey cannot be null instantiate in the __setupDefinitions\");\n } else if (this.__zOffsetKeys.hasOwnProperty(key)) {\n return this.__zOffsetKeys[key];\n } else {\n throw new Error(\"zOffsetKey does not contain key \" + key);\n }\n }\n\n /**\n * Returns the z-offset-key for the given layer type\n *\n * @param {string}\n * @memberof Template\n */\n substrateOffset(key: string): string {\n if (this.__substrateOffset === null) {\n throw new Error(\"substrateOffset cannot be null instantiate in the __setupDefinitions\");\n } else if (this.__substrateOffset.hasOwnProperty(key)) {\n return this.__substrateOffset[key];\n } else {\n throw new Error(\"substrateOffset does not contain key \" + key);\n }\n }\n\n /**\n * TODO - Remove this thing's dependency\n */\n get featureParams(): { [key: string]: string } {\n if (this.__featureParams === null) {\n throw new Error(\"featureParams cannot be null instantiate in the __setupDefinitions\");\n }\n\n return this.__featureParams;\n }\n\n /**\n * TODO - Remove this thing's dependency\n */\n get targetParams(): { [key: string]: string } {\n if (this.__targetParams === null) {\n throw new Error(\"targetParams cannot be null instantiate in the __setupDefinitions\");\n }\n\n return this.__targetParams;\n }\n\n /**\n * Returns the placement tool for the component/feature\n *\n * @readonly\n * @type {string}\n * @memberof Template\n */\n get placementTool(): string {\n if (this.__placementTool === null) {\n throw new Error(\"placementtool cannot be null instantiate in the __setupDefinitions\");\n }\n\n return this.__placementTool;\n }\n\n /**\n * Returns the tool params for the component\n *\n * @readonly\n * @type {{ [key: string]: string }}\n * @memberof Template\n */\n get toolParams(): { [key: string]: string } {\n if (this.__toolParams === null) {\n throw new Error(\"toolparams cannot be null instantiate in the __setupDefinitions\");\n }\n\n return this.__toolParams;\n }\n\n /**\n * Returns the default value for the component params\n *\n * @readonly\n * @type {{ [key: string]: number }}\n * @memberof Template\n */\n get defaults(): { [key: string]: number } {\n if (this.__defaults === null) {\n throw new Error(\"defaults cannot be null instantiate in the __setupDefinitions\");\n }\n\n return this.__defaults;\n }\n\n /**\n * Returns the min value for the component params\n *\n * @readonly\n * @type {{ [key: string]: number }}\n * @memberof Template\n */\n get minimum(): { [key: string]: number } {\n if (this.__minimum === null) {\n throw new Error(\"minimum cannot be null instantiate in the __setupDefinitions\");\n }\n\n return this.__minimum;\n }\n\n /**\n * Returns the max value for the component params\n *\n * @readonly\n * @type {{ [key: string]: number }}\n * @memberof Template\n */\n get maximum(): { [key: string]: number } {\n if (this.__maximum === null) {\n throw new Error(\"maximum cannot be null instantiate in the __setupDefinitions\");\n }\n\n return this.__maximum;\n }\n\n /**\n * Returns the units for the component params\n *\n * @readonly\n * @type {{ [key: string]: string }}\n * @memberof Template\n */\n get units(): { [key: string]: string } {\n if (this.__units === null) {\n throw new Error(\"units cannot be null instantiate in the __setupDefinitions\");\n }\n\n return this.__units;\n }\n\n /**\n * Returns the unique params for the component definition\n *\n * @readonly\n * @type {{ [key: string]: string }}\n * @memberof Template\n */\n get unique(): { [key: string]: string } {\n if (this.__unique === null) {\n throw new Error(\"unique cannot be null instantiate in the __setupDefinitions\");\n }\n\n return this.__unique;\n }\n\n /**\n * Returns the heritable properties for the component definition\n *\n * @readonly\n * @type {{ [key: string]: string }}\n * @memberof Template\n */\n get heritable(): { [key: string]: string } {\n if (this.__heritable === null) {\n throw new Error(\"Heritable cannot be null instantiate in the __setupDefinitions\");\n }\n return this.__heritable;\n }\n\n /**\n * Returns the renderkeys for the component definition\n *\n * @readonly\n * @type {Array}\n * @memberof Template\n */\n get renderKeys(): Array {\n if (this.__renderKeys === null) {\n throw new Error(\"renderKeys cannot be null instantiate in the __setupDefinitions\");\n }\n\n return this.__renderKeys;\n }\n\n /**\n * Returns the preview link for the component\n *\n * @readonly\n * @type {string}\n * @memberof Template\n */\n get previewImage(): string {\n return this._previewImage;\n }\n get childFeatureMacros(): Array {\n return this.__childFeatureMacros;\n }\n \n\n /**\n * Override this method to setup the definitions for the component\n *\n * @memberof Template\n */\n __setupDefinitions(): void {\n this.__unique = {\n position: \"Point\"\n };\n\n this.__heritable = {\n componentSpacing: \"Float\",\n height: \"Float\"\n };\n\n this.__defaults = {\n componentSpacing: 1000,\n height: 250\n };\n\n this.__units = {\n componentSpacing: \"μm\",\n height: \"μm\"\n };\n\n this.__minimum = {\n componentSpacing: 0,\n height: 10\n };\n\n this.__maximum = {\n componentSpacing: 10000,\n height: 1200\n };\n\n this.__featureParams = {\n componentSpacing: \"componentSpacing\",\n position: \"position\"\n };\n\n this.__targetParams = {\n };\n\n this.__placementTool = \"componentPositionTool\";\n\n this.__toolParams = {\n position: \"position\"\n };\n\n this.__renderKeys = [\"FLOW\"];\n\n this.__mint = \"TEMPLATE\";\n\n this.__zOffsetKeys = {\n FLOW: \"height\"\n };\n\n this.__substrateOffset = {\n FLOW: \"0\"\n };\n\n /*\n Check https://github.com/CIDARLAB/3DuF/wiki/Adding-new-components-v2 for more example data\n */\n //throw new Error(\"User needs to provide method for component definition, look at examples\");\n }\n\n /*\n * Replacing /src/app/view/render2D/primitiveSets2D/basic2D\n */\n\n /**\n * Returns the paperjs render for a given key (can be control/flow or anything user defined key that for future\n * compatibility.\n * @param key\n */\n render2D(params: { [key: string]: any }, key: string): ToolPaperObject {\n console.error(\"Default component template being used. User needs to provide method for component definition, look at examples\");\n const x = params.position[0];\n const y = params.position[1];\n\n const rect = new paper.Path.Rectangle(new paper.Point(x - 100, y - 100), new paper.Size(5000, 5000));\n rect.fillColor = params.color;\n return rect;\n }\n\n \n /**\n * Returns the render target for the component\n *\n * @param {string} key\n * @param {{ [key: string]: any }} params\n * @returns {ToolPaperObject}\n * @memberof Template\n */\n render2DTarget(key: string | null, params: { [key: string]: any }): ToolPaperObject {\n throw new Error(\"User needs to provide method for component definition, look at examples\");\n }\n\n /**\n * Returns the ports for the component definition\n * @param params\n */\n getPorts(params: { [key: string]: any }): Array {\n console.error(\"User needs to provide method for component definition, look at examples\");\n const ports = [];\n ports.push(new ComponentPort(0, 0, \"1\", LogicalLayerType.FLOW));\n return ports;\n }\n\n /**\n * Returns the bounds for component for given params. This assummes that the mint definiton, \n * render2D is implemented for the given defintion.\n *\n * @param {{ [key: string]: any }} params\n * @returns {paper.Rectangle}\n * @memberof Template\n */\n getBounds(params: { [key: string]: any }): paper.Rectangle{\n const renderkeys = this.renderKeys;\n const features: Array = [];\n for (let i = 0; i < renderkeys.length; i++) {\n const feature = this.render2D(params, renderkeys[i]);\n if(feature instanceof paper.PointText){\n continue;\n }\n features.push(feature.bounds);\n }\n\n const unitedBounds = features.reduce((bbox, item): paper.Rectangle => {\n if (item === null || item instanceof paper.PointText) {\n return bbox;\n }else{\n return !bbox ? item : bbox.unite(item);\n }\n });\n if (unitedBounds) {\n return unitedBounds;\n } else {\n return new paper.Rectangle(0, 0, 0, 0);\n }\n }\n\n /**\n * Returns the dimensions for the component for given params.\n *\n * @param {{ [key: string]: any }} params\n * @returns {{ xspan: any; yspan: any }}\n * @memberof Template\n */\n getDimensions(params: { [key: string]: any }): { xspan: any; yspan: any } {\n // TODO - Figure out a workaround for this\n if (PRIMITIVES_SERVER) {\n paper.setup(new paper.Size([64000, 48000]));\n }\n\n params.position = [0, 0];\n\n const unitedBounds = this.getBounds(params);\n if (unitedBounds === null) {\n throw new Error(\"No bounds found for component\");\n } \n const xspan = unitedBounds.width;\n const yspan = unitedBounds.height;\n // console.log(\"Dimensions:\",xspan, yspan);\n return { xspan: xspan, yspan: yspan };\n }\n\n /**\n * Returns the drawing offset for the component for given params. This assummes\n * that the mint definiton, and the getBounds methd works correctly\n *\n * @param {{ [key: string]: any }} params\n * @returns\n * @memberof Template\n */\n getDrawOffset(params: { [key: string]: any }) {\n params.position = [0, 0];\n params.rotation = 0;\n const position = params.position;\n const positionUnitedBounds = this.getBounds(params);\n // console.log(positionUnitedBounds.topLeft, position);\n if (positionUnitedBounds === null) {\n throw new Error(\"unitedBounds is null\");\n }\n const x_new = position[0] - positionUnitedBounds.topLeft.x;\n const y_new = position[1] - positionUnitedBounds.topLeft.y;\n return [x_new, y_new];\n }\n}\n","import uuid from \"node-uuid\";\nimport paper from \"paper\";\nimport Component from \"./component\";\nimport { ComponentPortInterchangeV1, LogicalLayerType, Point } from \"./init\";\n\nexport default class ComponentPort {\n protected _id: string;\n protected _x: number;\n protected _y: number;\n protected _label: string;\n protected _layer: LogicalLayerType;\n\n /**\n * Default constructor for ComponentPorts\n * @param {Number} x X coordinate\n * @param {Number} y Y coordinate\n * @param {String} label Name of the component\n * @param {string} layer\n */\n constructor(x: number, y: number, label: string, layer: LogicalLayerType) {\n this._id = uuid.v1();\n this._x = x;\n this._y = y;\n this._label = label;\n this._layer = layer;\n }\n\n /**\n * Gets the layer of the component port\n * @returns {string} Returns layer\n * @memberof ComponentPort\n */\n get layer() {\n return this._layer;\n }\n\n /**\n * Sets the layer\n * @param {string} value Value of the layer\n * @memberof ComponentPort\n * @returns {void}\n */\n set layer(value) {\n this._layer = value;\n }\n\n /**\n * Gets the label\n * @returns {string} Returns the label of the component port\n * @memberof ComponentPort\n */\n get label() {\n return this._label;\n }\n\n /**\n * Sets the label of the component port\n * @param {string} value Label\n * @memberof ComponentPort\n * @returns {void}\n */\n set label(value) {\n this._label = value;\n }\n\n /**\n * Gets the Y coordinate of the component port\n * @returns {number} Returns the y coordinate\n * @memberof ComponentPort\n */\n get y() {\n return this._y;\n }\n\n /**\n * Sets the Y coordinate of the component port\n * @param {number} y Value of the Y coordinate\n * @memberof ComponentPort\n * @returns {void}\n */\n set y(value) {\n this._y = value;\n }\n\n /**\n * Gets the X coordinate of the component port\n * @returns {number} Returns the X coordinate\n * @memberof ComponentPort\n */\n get x() {\n return this._x;\n }\n\n /**\n * Sets the X coordinate of the component port\n * @param {number} value Value of the X coordinate\n * @returns {void}\n * @memberof ComponentPort\n */\n set x(value) {\n this._x = value;\n }\n\n /**\n * Gets the ID of the component port\n * @returns {string} Returns the ID\n * @memberof ComponentPort\n */\n get id() {\n return this._id;\n }\n\n /**\n * Set the ID of the component port\n * @param {string} value ID\n * @memberof ComponentPort\n * @returns {void}\n */\n set id(value) {\n this._id = value;\n }\n\n /**\n * Converts to Interchange V1 format\n * @returns {Object} Returns a object with Interchange V1 format\n * @memberof ComponentPort\n */\n toInterchangeV1(): ComponentPortInterchangeV1 {\n return {\n x: this._x,\n y: this._y,\n layer: this._layer,\n label: this._label\n };\n }\n\n /**\n * Returns the absolute postition of the component\n * @param {Object} componentport Component port object\n * @param {Object} component Component object\n * @returns {Array} Returns an array which contains the X absolute coordinate and the y absolute coordinate\n * @memberof ComponentPort\n */\n static calculateAbsolutePosition(componentport: ComponentPort, component: Component): Point {\n const topleftposition = component.getValue(\"position\");\n const point = new paper.Point(topleftposition[0] - component.offset[0] + componentport.x, topleftposition[1] - component.offset[1] + componentport.y);\n const featpoint = new paper.Point(topleftposition[0] - component.offset[0], topleftposition[1] - component.offset[1]);\n const rotatedpoint = point.rotate(component.getRotation(), featpoint);\n return [rotatedpoint.x, rotatedpoint.y];\n }\n\n /**\n * Creates a new Component Port from an Interchange V1 format\n * @param {} json\n * @returns {ComponentPort} Returns a component port object\n * @memberof ComponentPort\n */\n static fromInterchangeV1(json: ComponentPortInterchangeV1): ComponentPort {\n let layer = LogicalLayerType.FLOW;\n if(json.layer === \"FLOW\"){\n layer = LogicalLayerType.FLOW;\n } else if (json.layer === \"CONTROL\"){\n layer = LogicalLayerType.CONTROL;\n } else if (json.layer === \"INTEGRATION\"){\n layer = LogicalLayerType.INTEGRATION;\n }\n return new ComponentPort(json.x, json.y, json.label, layer);\n }\n}\n","import Template from \"./template\";\nimport paper from \"paper\";\n\nexport default class Text extends Template {\n constructor() {\n super();\n }\n\n __setupDefinitions(): void {\n this.__unique = {\n position: \"Point\"\n };\n\n this.__heritable = {\n text: \"String\",\n height: \"Float\",\n fontSize: \"Float\"\n };\n\n this.__defaults = {\n fontSize: 10000 / 3,\n height: 250\n };\n\n this.__units = {\n fontSize: \"μm\",\n height: \"μm\"\n };\n\n this.__minimum = {\n fontSize: 10000 / 3,\n height: 1\n };\n\n this.__maximum = {\n fontSize: 10000 / 3,\n height: 10000\n };\n\n this.__toolParams = {\n position: \"position\"\n };\n\n this.__featureParams = {\n position: \"position\",\n text: \"text\",\n fontSize: \"fontSize\",\n height: \"height\"\n };\n\n this.__targetParams = {\n text: \"text\",\n fontSize: \"fontSize\",\n height: \"height\"\n };\n\n this.__placementTool = \"PositionTool\";\n\n this.__renderKeys = [\"FLOW\"];\n\n this.__mint = \"TEXT\";\n\n this.__zOffsetKeys = {\n FLOW: \"height\"\n };\n\n this.__substrateOffset = {\n FLOW: \"0\"\n };\n }\n\n render2D(params: { [k: string]: any }, key: string) {\n // Regardless of the key...\n const position = params.position;\n const text = params.text;\n const color = params.color;\n const rendered = new paper.PointText(new paper.Point(position[0], position[1]));\n rendered.justification = \"center\";\n rendered.fillColor = color;\n /// rendered.content = feature.getText();\n rendered.content = text;\n rendered.fontSize = 10000 / 3;\n return rendered;\n }\n\n render2DTarget(key: string | null, params: { [k: string]: any }) {\n if (key === null) {\n key = this.__renderKeys[0];\n }\n const render = this.render2D(params, key);\n render.fillColor!.alpha = 0.5;\n return render;\n }\n}\n","import Template from \"./template\";\nimport paper from \"paper\";\nimport ComponentPort from \"../core/componentPort\";\nimport { LogicalLayerType } from \"../core/init\";\n\nexport default class Port extends Template {\n constructor() {\n super();\n }\n\n __setupDefinitions(): void {\n this.__unique = {\n position: \"Point\"\n };\n\n this.__heritable = {\n componentSpacing: \"Float\",\n portRadius: \"Float\",\n height: \"Float\"\n };\n\n this.__defaults = {\n componentSpacing: 1000,\n portRadius: 0.7 * 1000,\n height: 1.1 * 1000\n };\n\n this.__units = {\n componentSpacing: \"μm\",\n portRadius: \"μm\",\n height: \"μm\"\n };\n\n this.__minimum = {\n componentSpacing: 0,\n portRadius: 0.8 * 10,\n height: 10\n };\n\n this.__maximum = {\n componentSpacing: 10000,\n portRadius: 3000,\n height: 1200\n };\n\n this.__placementTool = \"componentPositionTool\";\n\n this.__toolParams = {\n position: \"position\"\n };\n\n this.__featureParams = {\n componentSpacing: \"componentSpacing\",\n position: \"position\",\n portRadius: \"portRadius\"\n };\n\n this.__targetParams = {\n componentSpacing: \"componentSpacing\",\n portRadius: \"portRadius\"\n };\n\n this.__renderKeys = [\"FLOW\"];\n\n this.__mint = \"PORT\";\n\n this.__zOffsetKeys = {\n FLOW: \"height\"\n };\n\n this.__substrateOffset = {\n FLOW: \"0\"\n };\n }\n\n render2D(params: { [k: string]: any }, key: string) {\n // Regardless of the key...\n const position = params.position;\n const radius = params.portRadius;\n const color1 = params.color;\n const pos = new paper.Point(position[0], position[1]);\n const outerCircle = new paper.Path.Circle(pos, radius);\n outerCircle.fillColor = color1;\n return outerCircle;\n }\n\n render2DTarget(key: string | null, params: { [k: string]: any }) {\n if (key === null) {\n key = this.__renderKeys[0];\n }\n const render = this.render2D(params, key);\n render.fillColor!.alpha = 0.5;\n return render;\n }\n\n getPorts(params: { [k: string]: any }) {\n const radius = params.portRadius;\n\n const ports = [];\n\n ports.push(new ComponentPort(0, 0, \"1\", LogicalLayerType.FLOW));\n\n return ports;\n }\n}\n","import Template from \"./template\";\nimport paper from \"paper\";\nimport ComponentPort from \"../core/componentPort\";\nimport { LogicalLayerType } from \"../core/init\";\n\nexport default class Anode extends Template {\n constructor() {\n super();\n }\n\n __setupDefinitions(): void {\n this.__unique = {\n position: \"Point\"\n };\n\n this.__heritable = {\n componentSpacing: \"Float\",\n anodeRadius: \"Float\",\n pegHeight: \"Float\",\n pegWidth: \"Float\",\n height: \"Float\",\n rotation: \"Float\"\n };\n\n this.__defaults = {\n componentSpacing: 1000,\n anodeRadius: 0.9 * 1000,\n pegHeight: 0.2 * 1000,\n pegWidth: 0.7 * 1000,\n height: 1.1 * 1000,\n rotation: 0\n };\n\n this.__units = {\n componentSpacing: \"μm\",\n anodeRadius: \"μm\",\n pegHeight: \"μm\",\n pegWidth: \"μm\",\n height: \"μm\",\n rotation: \"°\"\n };\n\n this.__minimum = {\n componentSpacing: 0,\n anodeRadius: 0.4 * 10,\n pegHeight: 0.1 * 1000,\n pegWidth: 0.1 * 1000,\n height: 10,\n rotation: 0\n };\n\n this.__maximum = {\n componentSpacing: 10000,\n anodeRadius: 2000,\n pegHeight: 2 * 1000,\n pegWidth: 2 * 1000,\n height: 1200,\n rotation: 90\n };\n\n this.__placementTool = \"componentPositionTool\";\n\n this.__toolParams = {\n position: \"position\"\n };\n\n this.__featureParams = {\n componentSpacing: \"componentSpacing\",\n position: \"position\",\n anodeRadius: \"anodeRadius\",\n pegHeight: \"pegHeight\",\n pegWidth: \"pegWidth\",\n rotation: \"rotation\"\n };\n\n this.__targetParams = {\n componentSpacing: \"componentSpacing\",\n anodeRadius: \"anodeRadius\",\n pegHeight: \"pegHeight\",\n pegWidth: \"pegWidth\",\n rotation: \"rotation\"\n };\n\n this.__renderKeys = [\"FLOW\"];\n\n this.__mint = \"ANODE\";\n }\n\n render2D(params: { [k: string]: any }, key: string): paper.PathItem {\n // Regardless of the key...\n const position = params.position;\n const radius = params.anodeRadius;\n const pegheight = params.pegHeight;\n const pegwidth = params.pegWidth;\n const rotation = params.rotation;\n const color1 = params.color;\n const pos = new paper.Point(position[0], position[1]);\n const outerCircle = new paper.Path.Circle(pos, radius);\n outerCircle.fillColor = color1;\n\n const peg = new paper.Path.Rectangle(new paper.Rectangle(position[0] - pegwidth / 2, position[1] - pegheight / 2, pegwidth, pegheight));\n const finalCircle = outerCircle.subtract(peg);\n finalCircle.fillColor = color1;\n outerCircle.remove();\n peg.remove();\n return (finalCircle.rotate(rotation, pos) as unknown) as paper.PathItem;\n }\n\n render2DTarget(key: string | null, params: { [k: string]: any }): paper.PathItem {\n const render = this.render2D(params, key!);\n render.fillColor!.alpha = 0.5;\n return render;\n }\n\n getPorts(params: any) {\n const ports = [];\n\n ports.push(new ComponentPort(0, 0, \"1\", LogicalLayerType.FLOW));\n\n return ports;\n }\n}\n","import Template from \"./template\";\nimport paper from \"paper\";\nimport ComponentPort from \"../core/componentPort\";\nimport { LogicalLayerType } from \"../core/init\";\n\nexport default class Cahode extends Template {\n constructor() {\n super();\n }\n\n __setupDefinitions(): void {\n this.__unique = {\n position: \"Point\"\n };\n\n this.__heritable = {\n componentSpacing: \"Float\",\n cathodeRadius: \"Float\",\n pegRadius: \"Float\",\n pegThickness: \"Float\",\n height: \"Float\",\n rotation: \"Float\"\n };\n\n this.__defaults = {\n componentSpacing: 1000,\n cathodeRadius: 0.9 * 1000,\n pegRadius: 0.7 * 1000,\n pegThickness: 0.3 * 1000,\n height: 1.1 * 1000,\n rotation: 0\n };\n\n this.__units = {\n componentSpacing: \"μm\",\n cathodeRadius: \"μm\",\n pegRadius: \"μm\",\n pegThickness: \"μm\",\n height: \"μm\",\n rotation: \"°\"\n };\n\n this.__minimum = {\n componentSpacing: 0,\n cathodeRadius: 0.4 * 10,\n pegRadius: 0.1 * 1000,\n pegThickness: 0.1 * 1000,\n height: 10,\n rotation: 0\n };\n\n this.__maximum = {\n componentSpacing: 10000,\n cathodeRadius: 2000,\n pegRadius: 2 * 1000,\n pegThickness: 2 * 1000,\n height: 1200,\n rotation: 90\n };\n\n this.__placementTool = \"componentPositionTool\";\n\n this.__toolParams = {\n position: \"position\"\n };\n\n this.__featureParams = {\n componentSpacing: \"componentSpacing\",\n position: \"position\",\n cathodeRadius: \"cathodeRadius\",\n pegRadius: \"pegRadius\",\n pegThickness: \"pegThickness\",\n rotation: \"rotation\"\n };\n\n this.__targetParams = {\n componentSpacing: \"componentSpacing\",\n cathodeRadius: \"cathodeRadius\",\n pegRadius: \"pegRadius\",\n pegThickness: \"pegThickness\",\n rotation: \"rotation\"\n };\n\n this.__renderKeys = [\"FLOW\"];\n\n this.__mint = \"CATHODE\";\n }\n\n render2D(params: { [k: string]: any }, key: string): paper.PathItem {\n // Regardless of the key...\n const position = params.position;\n const radius = params.cathodeRadius;\n const pegradius = params.pegRadius;\n const pegthickness = params.pegThickness;\n const rotation = params.rotation;\n const color1 = params.color;\n const pos = new paper.Point(position[0], position[1]);\n const outerCircle = new paper.Path.Circle(pos, radius);\n outerCircle.fillColor = color1;\n\n const peg1 = new paper.Path.Rectangle(new paper.Rectangle(position[0] - pegradius / 2, position[1] - pegthickness / 2, pegradius, pegthickness));\n const peg2 = new paper.Path.Rectangle(new paper.Rectangle(position[0] - pegthickness / 2, position[1] - pegradius / 2, pegthickness, pegradius));\n const finalCircle = outerCircle.subtract(peg1.unite(peg2));\n finalCircle.fillColor = color1;\n outerCircle.remove();\n peg1.remove();\n peg2.remove();\n return (finalCircle.rotate(rotation, pos) as unknown) as paper.PathItem;\n }\n\n render2DTarget(key: string | null, params: { [k: string]: any }): paper.PathItem {\n if (key === null) {\n key = this.__renderKeys[0];\n }\n const render = this.render2D(params, key);\n render.fillColor!.alpha = 0.5;\n return render;\n }\n\n getPorts(params: { [k: string]: any }) {\n const ports = [];\n\n ports.push(new ComponentPort(0, 0, \"1\", LogicalLayerType.FLOW));\n\n return ports;\n }\n}\n","import Template from \"./template\";\nimport paper from \"paper\";\n\nexport default class Channel extends Template {\n constructor() {\n super();\n }\n\n __setupDefinitions(): void {\n this.__unique = {\n start: \"Point\",\n end: \"Point\"\n };\n\n this.__defaults = {\n channelWidth: 0.8 * 1000,\n height: 250\n };\n\n this.__heritable = {\n channelWidth: \"Float\",\n height: \"Float\"\n };\n\n this.__units = {\n channelWidth: \"μm\",\n height: \"μm\"\n };\n\n this.__minimum = {\n channelWidth: 3,\n height: 10\n };\n\n this.__maximum = {\n channelWidth: 12000,\n height: 1200\n };\n\n this.__placementTool = \"DragTool\";\n\n this.__toolParams = {\n start: \"start\",\n end: \"end\"\n };\n\n this.__featureParams = {\n start: \"start\",\n end: \"end\",\n width: \"channelWidth\"\n };\n\n this.__targetParams = {\n diameter: \"channelWidth\",\n channelWidth: \"channelWidth\"\n };\n\n this.__renderKeys = [\"FLOW\"];\n\n this.__mint = \"CHANNEL\";\n\n this.__zOffsetKeys = {\n FLOW: \"height\"\n };\n\n this.__substrateOffset = {\n FLOW: \"0\"\n };\n }\n\n render2D(params: { [k: string]: any }, key: string) {\n // Regardless of the key...\n const start = params.start;\n const end = params.end;\n const color = params.color;\n const width = params.width;\n const baseColor = params.baseColor;\n const startPoint = new paper.Point(start[0], start[1]);\n const endPoint = new paper.Point(end[0], end[1]);\n const vec = endPoint.subtract(startPoint);\n const rec = new paper.Path.Rectangle({\n size: [vec.length, width],\n point: start,\n // radius: width/2,\n fillColor: color,\n strokeWidth: 0\n });\n rec.translate(new paper.Point(0, -width / 2));\n rec.rotate(vec.angle, start);\n return rec;\n }\n\n render2DTarget(key: string | null, params: { [k: string]: any }) {\n const thickness = params.channelWidth / 5;\n const length = params.channelWidth;\n const x = params.position[0];\n const y = params.position[1];\n const color = params.color;\n let chair = new paper.Path.Rectangle(new paper.Rectangle(x - length / 2, y - thickness / 2, length, thickness));\n let chairtarget = chair.unite(new paper.Path.Rectangle(new paper.Rectangle(x - thickness / 2, y - length / 2, thickness, length)));\n chairtarget.fillColor = color;\n chairtarget.fillColor!.alpha = 0.5;\n return chair;\n }\n}\n","import Template from \"./template\";\nimport paper from \"paper\";\nimport ComponentPort from \"../core/componentPort\";\nimport { LogicalLayerType } from \"../core/init\";\n\nexport default class BetterMixer extends Template {\n constructor() {\n super();\n }\n\n __setupDefinitions(): void {\n this.__unique = {\n position: \"Point\"\n };\n\n this.__heritable = {\n componentSpacing: \"Float\",\n bendSpacing: \"Float\",\n numberOfBends: \"Float\",\n channelWidth: \"Float\",\n bendLength: \"Float\",\n rotation: \"Float\",\n height: \"Float\"\n };\n\n this.__defaults = {\n componentSpacing: 1000,\n channelWidth: 0.8 * 1000,\n bendSpacing: 1.23 * 1000,\n numberOfBends: 1,\n rotation: 0,\n bendLength: 2.46 * 1000,\n height: 250\n };\n\n this.__units = {\n componentSpacing: \"μm\",\n bendSpacing: \"μm\",\n numberOfBends: \"\",\n channelWidth: \"μm\",\n bendLength: \"μm\",\n rotation: \"°\",\n height: \"μm\"\n };\n\n this.__minimum = {\n componentSpacing: 0,\n channelWidth: 10,\n bendSpacing: 10,\n numberOfBends: 1,\n rotation: 0,\n bendLength: 10,\n height: 10\n };\n\n this.__maximum = {\n componentSpacing: 10000,\n channelWidth: 2000,\n bendSpacing: 6000,\n numberOfBends: 20,\n rotation: 360,\n bendLength: 12 * 1000,\n height: 1200\n };\n\n this.__placementTool = \"componentPositionTool\";\n\n this.__toolParams = {\n cursorPosition: \"position\"\n };\n\n this.__featureParams = {\n componentSpacing: \"componentSpacing\",\n position: \"position\",\n channelWidth: \"channelWidth\",\n bendSpacing: \"bendSpacing\",\n numberOfBends: \"numberOfBends\",\n rotation: \"rotation\",\n bendLength: \"bendLength\"\n };\n\n this.__targetParams = {\n componentSpacing: \"componentSpacing\",\n channelWidth: \"channelWidth\",\n bendSpacing: \"bendSpacing\",\n numberOfBends: \"numberOfBends\",\n rotation: \"rotation\",\n bendLength: \"bendLength\"\n };\n\n this.__renderKeys = [\"FLOW\"];\n\n this.__mint = \"MIXER\";\n\n this.__zOffsetKeys = {\n FLOW: \"height\"\n };\n\n this.__substrateOffset = {\n FLOW: \"0\"\n };\n }\n\n getPorts(params: { [k: string]: any }) {\n const channelWidth = params.channelWidth;\n const bendLength = params.bendLength;\n const bendSpacing = params.bendSpacing;\n const rotation = params.rotation;\n const numberOfBends = params.numberOfBends;\n\n const ports = [];\n\n ports.push(new ComponentPort(bendLength / 2 + channelWidth, 0, \"1\", LogicalLayerType.FLOW));\n\n ports.push(new ComponentPort(bendLength / 2 + channelWidth, (2 * numberOfBends + 1) * channelWidth + 2 * numberOfBends * bendSpacing, \"2\", LogicalLayerType.FLOW));\n\n return ports;\n }\n\n render2D(params: { [k: string]: any }, key: string): paper.CompoundPath {\n const channelWidth = params.channelWidth;\n const bendLength = params.bendLength;\n const bendSpacing = params.bendSpacing;\n const rotation = params.rotation;\n const numBends = params.numberOfBends;\n const x = params.position[0];\n const y = params.position[1];\n const color = params.color;\n const segHalf = bendLength / 2 + channelWidth;\n const segLength = bendLength + 2 * channelWidth;\n const segBend = bendSpacing + 2 * channelWidth;\n const vRepeat = 2 * bendSpacing + 2 * channelWidth;\n const vOffset = bendSpacing + channelWidth;\n const hOffset = bendLength / 2 + channelWidth / 2;\n const serp = new paper.CompoundPath(\"\");\n // draw first segment\n serp.addChild(new paper.Path.Rectangle(new paper.Rectangle(x, y, segHalf + channelWidth / 2, channelWidth)));\n for (let i = 0; i < numBends; i++) {\n serp.addChild(new paper.Path.Rectangle(new paper.Rectangle(x, y + vRepeat * i, channelWidth, segBend)));\n serp.addChild(new paper.Path.Rectangle(new paper.Rectangle(x, y + vOffset + vRepeat * i, segLength, channelWidth)));\n serp.addChild(new paper.Path.Rectangle(new paper.Rectangle(x + channelWidth + bendLength, y + vOffset + vRepeat * i, channelWidth, segBend)));\n if (i === numBends - 1) {\n // draw half segment to close\n serp.addChild(new paper.Path.Rectangle(new paper.Rectangle(x + hOffset, y + vRepeat * (i + 1), segHalf, channelWidth)));\n } else {\n // draw full segment\n serp.addChild(new paper.Path.Rectangle(new paper.Rectangle(x, y + vRepeat * (i + 1), segLength, channelWidth)));\n }\n }\n\n serp.fillColor = color;\n return (serp.rotate(rotation, new paper.Point(x, y)) as unknown) as paper.CompoundPath;\n }\n\n render2DTarget(key: string | null, params: { [k: string]: any }): paper.CompoundPath {\n if (key === null) {\n key = this.__renderKeys[0];\n }\n const serp = this.render2D(params, key);\n serp.fillColor!.alpha = 0.5;\n return serp;\n }\n}\n","import Template from \"./template\";\nimport paper from \"paper\";\nimport ComponentPort from \"../core/componentPort\";\nimport { LogicalLayerType } from \"../core/init\";\n\nexport default class RotaryMixer extends Template {\n constructor() {\n super();\n }\n\n __setupDefinitions(): void {\n this.__unique = {\n position: \"Point\"\n };\n\n this.__heritable = {\n componentSpacing: \"Float\",\n rotation: \"Float\",\n radius: \"Float\",\n flowChannelWidth: \"Float\",\n controlChannelWidth: \"Float\",\n valveWidth: \"Float\",\n valveLength: \"Float\",\n valveSpacing: \"Float\",\n height: \"Float\"\n };\n\n this.__defaults = {\n componentSpacing: 1000,\n rotation: 0,\n radius: 2000,\n flowChannelWidth: 1000,\n controlChannelWidth: 500,\n valveWidth: 2.4 * 1000,\n valveLength: 1 * 1000,\n valveSpacing: 300,\n valveRadius: 1.2 * 1000,\n height: 250\n };\n\n this.__units = {\n componentSpacing: \"μm\",\n rotation: \"°\",\n radius: \"μm\",\n flowChannelWidth: \"μm\",\n controlChannelWidth: \"μm\",\n valveWidth: \"μm\",\n valveLength: \"μm\",\n valveSpacing: \"μm\",\n height: \"μm\"\n };\n\n this.__minimum = {\n componentSpacing: 0,\n radius: 0.1 * 5000,\n flowChannelWidth: 0.1 * 1000,\n controlChannelWidth: 0.1 * 1000,\n valveWidth: 0.1 * 2.4 * 1000,\n valveLength: 0.1 * 2.4 * 1000,\n valveSpacing: 0.1 * 300,\n valveRadius: 0.1 * 1.2 * 1000,\n height: 0.1 * 200,\n rotation: 0\n };\n\n this.__maximum = {\n componentSpacing: 10000,\n radius: 10 * 5000,\n flowChannelWidth: 10 * 1000,\n controlChannelWidth: 10 * 1000,\n valveWidth: 10 * 2.4 * 1000,\n valveLength: 10 * 2.4 * 1000,\n valveSpacing: 10 * 300,\n valveRadius: 10 * 1.2 * 1000,\n height: 10 * 200,\n rotation: 360\n };\n\n this.__placementTool = \"multilayerPositionTool\";\n\n this.__toolParams = {\n position: \"position\"\n };\n\n this.__featureParams = {\n componentSpacing: \"componentSpacing\",\n position: \"position\",\n rotation: \"rotation\",\n flowChannelWidth: \"flowChannelWidth\",\n controlChannelWidth: \"controlChannelWidth\",\n radius: \"radius\",\n valveWidth: \"valveWidth\",\n valveLength: \"valveLength\",\n valveSpacing: \"valveSpacing\",\n height: \"height\"\n };\n\n this.__targetParams = {\n componentSpacing: \"componentSpacing\",\n position: \"position\",\n rotation: \"rotation\",\n flowChannelWidth: \"flowChannelWidth\",\n controlChannelWidth: \"controlChannelWidth\",\n radius: \"radius\",\n valveWidth: \"valveWidth\",\n valveLength: \"valveLength\",\n valveSpacing: \"valveSpacing\",\n height: \"height\"\n };\n\n this.__renderKeys = [\"FLOW\", \"CONTROL\"];\n\n this.__mint = \"ROTARY MIXER\";\n\n this.__zOffsetKeys = {\n FLOW: \"height\",\n CONTROL: \"height\"\n };\n\n this.__substrateOffset = {\n FLOW: \"0\",\n CONTROL: \"+1\"\n };\n }\n\n getPorts(params: { [k: string]: any }) {\n const radius = params.radius;\n const valvespacing = params.valveSpacing;\n const valvelength = params.valveLength;\n const valvewidth = params.valveWidth;\n const flowChannelWidth = params.flowChannelWidth; // params[\"flowChannelWidth\"];\n const channellength = radius + valvelength + 2 * valvespacing + flowChannelWidth; // This needs to be a real expression\n\n const ports = [];\n\n ports.push(new ComponentPort(channellength, -radius - flowChannelWidth / 2, \"1\", LogicalLayerType.FLOW));\n ports.push(new ComponentPort(-channellength, radius + flowChannelWidth / 2, \"2\", LogicalLayerType.FLOW));\n\n // top right\n ports.push(\n new ComponentPort(radius + flowChannelWidth + valvespacing + valvelength / 2, -radius - flowChannelWidth / 2 - valvewidth, \"3\", LogicalLayerType.CONTROL)\n );\n // top bottom\n ports.push(new ComponentPort(0, -radius - flowChannelWidth / 2 - valvewidth, \"4\", LogicalLayerType.CONTROL));\n // middle right\n ports.push(new ComponentPort(flowChannelWidth / 2 + radius + valvewidth, 0, \"5\", LogicalLayerType.CONTROL));\n // bottom middle\n ports.push(new ComponentPort(0, radius + flowChannelWidth / 2 + valvewidth, \"6\", LogicalLayerType.CONTROL));\n // bottom left\n ports.push(\n new ComponentPort(-radius - valvespacing - valvelength - flowChannelWidth / 2, radius + flowChannelWidth / 2 + valvewidth, \"7\", LogicalLayerType.CONTROL)\n );\n\n return ports;\n }\n\n render2D(params: { [k: string]: any }, key: string) {\n if (key === \"FLOW\") {\n return this.__renderFlow(params);\n } else if (key === \"CONTROL\") {\n return this.__renderControl(params);\n } \n throw new Error(\"No valid key found\");\n }\n\n render2DTarget(key: string | null, params: { [k: string]: any }) {\n const rotarymixer_flow = this.__renderFlow(params);\n const rotarymixer_control = this.__renderControl(params);\n const ret = new paper.CompoundPath(\"\");\n ret.addChild(rotarymixer_flow);\n ret.addChild(rotarymixer_control);\n ret.fillColor = params.color;\n ret.fillColor!.alpha = 0.5;\n\n return ret;\n }\n\n __renderFlow(params: { [k: string]: any }) {\n const position = params.position;\n const radius = params.radius;\n const color = params.color;\n const rotation = params.rotation;\n const valvespacing = params.valveSpacing;\n const valvelength = params.valveLength;\n const valvewidth = params.valveWidth;\n const flowChannelWidth = params.flowChannelWidth; // params[\"flowChannelWidth\"];\n const px = position[0];\n const py = position[1];\n const center = new paper.Point(px, py);\n const channellength = radius + valvelength + 2 * valvespacing + flowChannelWidth; // This needs to be a real expression\n\n const rotarymixer = new paper.CompoundPath(\"\");\n\n const innercirc = new paper.Path.Circle(center, radius);\n const outercirc = new paper.Path.Circle(center, radius + flowChannelWidth);\n\n let rotary = outercirc.subtract(innercirc);\n\n let topleft = new paper.Point(px - valvelength / 2, py - radius - flowChannelWidth / 2 - valvewidth / 2);\n const topmiddlerectangle = new paper.Path.Rectangle(topleft, new paper.Size(valvelength, valvewidth));\n rotary = rotary.subtract(topmiddlerectangle);\n\n topleft = new paper.Point(px + radius + flowChannelWidth / 2 - valvewidth / 2, py - valvelength / 2);\n const middlerightrectangle = new paper.Path.Rectangle(topleft, new paper.Size(valvewidth, valvelength));\n rotary = rotary.subtract(middlerightrectangle);\n\n topleft = new paper.Point(px - valvelength / 2, py + radius + flowChannelWidth / 2 - valvewidth / 2);\n const bottommiddlerectangle = new paper.Path.Rectangle(topleft, new paper.Size(valvelength, valvewidth));\n rotary = rotary.subtract(bottommiddlerectangle);\n\n rotarymixer.addChild(rotary);\n\n const point1 = new paper.Point(px, py - radius - flowChannelWidth);\n const point2 = new paper.Point(px + channellength, py - radius);\n let rectangle: paper.Path.Rectangle | paper.PathItem = new paper.Path.Rectangle(point1, point2);\n\n topleft = new paper.Point(px + radius + flowChannelWidth + valvespacing, py - radius - flowChannelWidth / 2 - valvewidth / 2);\n const topleftrectangle = new paper.Path.Rectangle(topleft, new paper.Size(valvelength, valvewidth));\n rectangle = rectangle.subtract(topleftrectangle);\n\n rectangle = rectangle.subtract(topmiddlerectangle);\n\n rotarymixer.addChild(rectangle);\n\n const point3 = new paper.Point(px - channellength, py + radius);\n const point4 = new paper.Point(px, py + radius + flowChannelWidth);\n let rectangle2: paper.Path.Rectangle | paper.PathItem = new paper.Path.Rectangle(point3, point4);\n\n topleft = new paper.Point(px - radius - valvespacing - valvelength - flowChannelWidth, py + radius + flowChannelWidth / 2 - valvewidth / 2);\n const bottomleftrectangle = new paper.Path.Rectangle(topleft, new paper.Size(valvelength, valvewidth));\n rectangle2 = rectangle2.subtract(bottomleftrectangle);\n\n rectangle2 = rectangle2.subtract(bottommiddlerectangle);\n\n rotarymixer.addChild(rectangle2);\n\n rotarymixer.fillColor = color;\n rotarymixer.rotate(rotation, new paper.Point(px, py));\n return rotarymixer;\n }\n\n __renderControl(params: { [k: string]: any }) {\n const position = params.position;\n const radius = params.radius;\n const color = params.color;\n const rotation = params.rotation;\n const valvespacing = params.valveSpacing;\n const valvelength = params.valveLength;\n const valvewidth = params.valveWidth;\n const flowChannelWidth = params.flowChannelWidth;\n const controlChannelWidth = params.controlChannelWidth; // params[\"flowChannelWidth\"];\n const px = position[0];\n const py = position[1];\n\n const rotarymixer = new paper.CompoundPath(\"\");\n let topleft = null;\n const bottomright = null;\n\n // Draw top right valve\n topleft = new paper.Point(px + radius + flowChannelWidth + valvespacing, py - radius - flowChannelWidth / 2 - valvewidth / 2);\n const topleftrectangle = new paper.Path.Rectangle(topleft, new paper.Size(valvelength, valvewidth));\n rotarymixer.addChild(topleftrectangle);\n\n let topLeft = new paper.Point(px + radius + flowChannelWidth + valvespacing + valvelength / 2 - controlChannelWidth / 2, py - radius - flowChannelWidth / 2 - valvewidth);\n let bottomRight = new paper.Point(px + radius + flowChannelWidth + valvespacing + valvelength / 2 + controlChannelWidth / 2, py - radius);\n rotarymixer.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n // Draw top middle valve\n topleft = new paper.Point(px - valvelength / 2, py - radius - flowChannelWidth / 2 - valvewidth / 2);\n const topmiddlerectangle = new paper.Path.Rectangle(topleft, new paper.Size(valvelength, valvewidth));\n rotarymixer.addChild(topmiddlerectangle);\n\n topLeft = new paper.Point(px - controlChannelWidth / 2, py - radius - flowChannelWidth / 2 - valvewidth);\n bottomRight = new paper.Point(px + controlChannelWidth / 2, py - radius);\n rotarymixer.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n // Draw middle right valve\n topleft = new paper.Point(px + radius + flowChannelWidth / 2 - valvewidth / 2, py - valvelength / 2);\n const middlerightrectangle = new paper.Path.Rectangle(topleft, new paper.Size(valvewidth, valvelength));\n rotarymixer.addChild(middlerightrectangle);\n\n topLeft = new paper.Point(px + flowChannelWidth / 2 + radius, py - controlChannelWidth / 2);\n bottomRight = new paper.Point(px + flowChannelWidth / 2 + radius + valvewidth, py + controlChannelWidth / 2);\n rotarymixer.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n // Draw Bottom middle valve\n topleft = new paper.Point(px - valvelength / 2, py + radius + flowChannelWidth / 2 - valvewidth / 2);\n const bottommiddlerectangle = new paper.Path.Rectangle(topleft, new paper.Size(valvelength, valvewidth));\n rotarymixer.addChild(bottommiddlerectangle);\n\n topLeft = new paper.Point(px - controlChannelWidth / 2, py + radius + flowChannelWidth / 2);\n bottomRight = new paper.Point(px + controlChannelWidth / 2, py + radius + flowChannelWidth / 2 + valvewidth);\n rotarymixer.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n // Draw bottom left valve\n topleft = new paper.Point(px - radius - valvespacing - valvelength - flowChannelWidth, py + radius + flowChannelWidth / 2 - valvewidth / 2);\n const bottomleftrectangle = new paper.Path.Rectangle(topleft, new paper.Size(valvelength, valvewidth));\n rotarymixer.addChild(bottomleftrectangle);\n\n topLeft = new paper.Point(px - radius - valvespacing - valvelength - flowChannelWidth / 2 - controlChannelWidth / 2, py + radius + flowChannelWidth / 2);\n bottomRight = new paper.Point(px - radius - valvespacing - valvelength - flowChannelWidth / 2 + controlChannelWidth / 2, py + radius + flowChannelWidth / 2 + valvewidth);\n rotarymixer.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n rotarymixer.fillColor = color;\n rotarymixer.rotate(rotation, new paper.Point(px, py));\n return rotarymixer;\n }\n}\n","import Template from \"./template\";\nimport paper from \"paper\";\nimport { ToolPaperObject } from \"../core/init\";\n\ninterface ParamsIF {\n position: number[];\n width: number;\n length: number;\n color: paper.Color;\n}\n\nexport default class AlignmentMarks extends Template {\n constructor() {\n super();\n }\n\n __setupDefinitions(): void {\n this.__unique = {\n position: \"Point\"\n };\n\n this.__heritable = {\n componentSpacing: \"Float\",\n width: \"Float\",\n length: \"Float\",\n height: \"Float\"\n };\n\n this.__defaults = {\n width: 4000,\n length: 4000,\n height: 250\n };\n\n this.__units = {\n width: \"μm\",\n length: \"μm\",\n height: \"μm\"\n };\n\n this.__minimum = {\n width: 10,\n length: 10,\n height: 10\n };\n\n this.__maximum = {\n width: 200000,\n length: 200000,\n height: 1200\n };\n\n this.__placementTool = \"multilayerPositionTool\";\n\n this.__toolParams = {\n position: \"position\"\n };\n\n this.__featureParams = {\n position: \"position\",\n width: \"width\",\n length: \"length\"\n };\n\n this.__targetParams = {\n width: \"width\",\n length: \"length\"\n };\n\n this.__renderKeys = [\"FLOW\", \"CONTROL\"];\n\n this.__mint = \"ALIGNMENT MARKS\";\n\n this.__zOffsetKeys = {\n FLOW: \"height\",\n CONTROL: \"height\"\n };\n\n this.__substrateOffset = {\n FLOW: \"0\",\n CONTROL: \"+1\"\n };\n }\n\n render2D(params: ParamsIF, key: string) {\n if (key === \"FLOW\") {\n return this.__drawFlow(params);\n } else if (key === \"CONTROL\") {\n return this.__drawControl(params);\n }\n\n throw new Error(\"Unknown key: \" + key);\n }\n\n render2DTarget(key: string | null, params: ParamsIF): paper.CompoundPath {\n const position = params.position;\n const width = params.width;\n const length = params.length;\n const color = params.color;\n const center = new paper.Point(position[0], position[1]);\n const ret = new paper.CompoundPath(\"\");\n const topleftpoint = new paper.Point(position[0] - width, position[1] - length);\n const bottomrightpoint = new paper.Point(position[0] + width, position[1] + length);\n\n const topleftrect = new paper.Path.Rectangle(topleftpoint, center);\n\n ret.addChild(topleftrect);\n\n const bottomrightrect = new paper.Path.Rectangle((position as unknown) as paper.Rectangle, (bottomrightpoint as unknown) as paper.Size);\n\n ret.addChild(bottomrightrect);\n\n const topmiddlepoint = new paper.Point(position[0], position[1] - length);\n const middlerightpoint = new paper.Point(position[0] + width, position[1]);\n const middleleftpoint = new paper.Point(position[0] - width, position[1]);\n const bottommiddlepoint = new paper.Point(position[0], position[1] + length);\n\n const toprightrect = new paper.Path.Rectangle(topmiddlepoint, middlerightpoint);\n\n ret.addChild(toprightrect);\n\n const bottomleftrect = new paper.Path.Rectangle(middleleftpoint, bottommiddlepoint);\n\n ret.addChild(bottomleftrect);\n\n ret.fillColor = color;\n\n ret.fillColor.alpha = 0.5;\n\n return ret;\n }\n\n __drawFlow(params: ParamsIF) {\n const position = params.position;\n const width = params.width;\n const length = params.length;\n const color = params.color;\n const center = new paper.Point(position[0], position[1]);\n const ret = new paper.CompoundPath(\"\");\n const topleftpoint = new paper.Point(position[0] - width, position[1] - length);\n const bottomrightpoint = new paper.Point(position[0] + width, position[1] + length);\n\n const topleftrect = new paper.Path.Rectangle(topleftpoint, center);\n\n ret.addChild(topleftrect);\n\n const bottomrightrect = new paper.Path.Rectangle((position as unknown) as paper.Rectangle, (bottomrightpoint as unknown) as paper.Size);\n\n ret.addChild(bottomrightrect);\n\n ret.fillColor = color;\n return ret;\n }\n\n __drawControl(params: ParamsIF) {\n const position = params.position;\n const width = params.width;\n const length = params.length;\n const color = params.color;\n const here = new paper.Point(position[0], position[1]);\n const ret = new paper.CompoundPath(\"\");\n const topmiddlepoint = new paper.Point(position[0], position[1] - length);\n const middlerightpoint = new paper.Point(position[0] + width, position[1]);\n const middleleftpoint = new paper.Point(position[0] - width, position[1]);\n const bottommiddlepoint = new paper.Point(position[0], position[1] + length);\n\n const toprightrect = new paper.Path.Rectangle(topmiddlepoint, middlerightpoint);\n\n ret.addChild(toprightrect);\n\n const bottomleftrect = new paper.Path.Rectangle(middleleftpoint, bottommiddlepoint);\n\n ret.addChild(bottomleftrect);\n\n ret.fillColor = color;\n return ret;\n }\n}\n","import Template from \"./template\";\nimport paper from \"paper\";\nimport ComponentPort from \"../core/componentPort\";\nimport { LogicalLayerType } from \"../core/init\";\n\nexport default class CellTrapL extends Template {\n constructor() {\n super();\n }\n\n __setupDefinitions(): void {\n this.__unique = {\n position: \"Point\"\n };\n\n this.__heritable = {\n componentSpacing: \"Float\",\n chamberLength: \"Float\",\n feedingChannelWidth: \"Float\",\n rotation: \"Float\",\n chamberWidth: \"Float\",\n numberOfChambers: \"Float\",\n chamberSpacing: \"Float\",\n height: \"Float\"\n };\n\n this.__defaults = {\n componentSpacing: 1000,\n chamberLength: 1.2 * 1000,\n feedingChannelWidth: 0.41 * 1000,\n rotation: 270,\n chamberWidth: 1.23 * 1000,\n numberOfChambers: 6,\n chamberSpacing: 2.46 * 1000,\n height: 250\n };\n\n this.__units = {\n componentSpacing: \"μm\",\n chamberLength: \"μm\",\n feedingChannelWidth: \"μm\",\n rotation: \"°\",\n chamberWidth: \"μm\",\n numberOfChambers: \"\",\n chamberSpacing: \"μm\",\n height: \"μm\"\n };\n\n this.__minimum = {\n componentSpacing: 0,\n chamberLength: 30,\n feedingChannelWidth: 10,\n chamberWidth: 30,\n numberOfChambers: 1,\n chamberSpacing: 30,\n height: 10,\n rotation: 0\n };\n\n this.__maximum = {\n componentSpacing: 10000,\n chamberLength: 6000,\n feedingChannelWidth: 2000,\n chamberWidth: 6000,\n numberOfChambers: 100,\n chamberSpacing: 12 * 1000,\n height: 1200,\n rotation: 360\n };\n\n this.__featureParams = {\n componentSpacing: \"componentSpacing\",\n position: \"position\",\n rotation: \"rotation\",\n chamberWidth: \"chamberWidth\",\n chamberLength: \"chamberLength\",\n numberOfChambers: \"numberOfChambers\",\n chamberSpacing: \"chamberSpacing\",\n feedingChannelWidth: \"feedingChannelWidth\",\n height: \"height\"\n };\n\n this.__targetParams = {\n componentSpacing: \"componentSpacing\",\n rotation: \"rotation\",\n chamberWidth: \"chamberWidth\",\n chamberLength: \"chamberLength\",\n numberOfChambers: \"numberOfChambers\",\n chamberSpacing: \"chamberSpacing\",\n feedingChannelWidth: \"feedingChannelWidth\",\n height: \"height\"\n };\n\n this.__placementTool = \"CellPositionTool\";\n\n this.__toolParams = {\n position: \"position\"\n };\n\n this.__renderKeys = [\"FLOW\", \"CELL\"];\n\n this.__mint = \"LONG CELL TRAP\";\n\n this.__zOffsetKeys = {\n FLOW: \"height\",\n CELL: \"height\"\n };\n\n this.__substrateOffset = {\n FLOW: \"0\",\n CELL: \"0\"\n };\n }\n\n getPorts(params: { [k: string]: any }) {\n const chamberLength = params.chamberLength;\n const numChambers = params.numberOfChambers;\n const chamberWidth = params.chamberWidth;\n const feedingChannelWidth = params.feedingChannelWidth;\n const chamberSpacing = params.chamberSpacing;\n\n const ports = [];\n\n ports.push(new ComponentPort(0, chamberLength + feedingChannelWidth / 2, \"1\", LogicalLayerType.FLOW));\n\n ports.push(new ComponentPort((numChambers / 2) * (chamberWidth + chamberSpacing) + chamberSpacing, chamberLength + feedingChannelWidth / 2, \"2\", LogicalLayerType.FLOW));\n\n return ports;\n }\n\n render2D(params: { [k: string]: any }, key = \"FLOW\") {\n if (key === \"FLOW\") {\n return this.__drawFlow(params);\n } else if (key === \"CELL\") {\n return this.__drawCell(params);\n } else {\n const flow = this.__drawFlow(params);\n const control = this.__drawCell(params);\n const ret = new paper.CompoundPath(\"\");\n ret.addChild(flow);\n ret.addChild(control);\n return ret;\n }\n\n throw new Error(\"Unknown key: \" + key);\n\n }\n\n render2DTarget(key: string | null, params: { [k: string]: any }) {\n const traps = this.__drawFlow(params);\n traps.addChild(this.__drawCell(params));\n traps.fillColor!.alpha = 0.5;\n return traps;\n }\n\n __drawFlow(params: { [k: string]: any }) {\n const rotation = params.rotation;\n const position = params.position;\n const chamberLength = params.chamberLength;\n const numChambers = params.numberOfChambers;\n const chamberWidth = params.chamberWidth;\n const feedingChannelWidth = params.feedingChannelWidth;\n const chamberSpacing = params.chamberSpacing;\n\n const color = params.color;\n const x = position[0];\n const y = position[1];\n const chamberList = new paper.CompoundPath(\"\");\n chamberList.fillColor = color;\n let rec;\n let traps;\n let channels;\n\n const startPoint = new paper.Point(x, y + chamberLength);\n channels = new paper.Path.Rectangle({\n point: startPoint,\n size: [(numChambers / 2) * (chamberWidth + chamberSpacing) + chamberSpacing, feedingChannelWidth],\n fillColor: color,\n strokeWidth: 0\n });\n chamberList.addChild(channels);\n\n traps = new paper.CompoundPath(chamberList);\n traps.fillColor = color;\n traps.rotate(rotation, new paper.Point(x, y));\n return traps;\n }\n\n __drawCell(params: { [k: string]: any }) {\n const rotation = params.rotation;\n const position = params.position;\n const chamberLength = params.chamberLength;\n const numChambers = params.numberOfChambers;\n const chamberWidth = params.chamberWidth;\n const feedingChannelWidth = params.feedingChannelWidth;\n const chamberSpacing = params.chamberSpacing;\n const color = params.color;\n const x = position[0];\n const y = position[1];\n const chamberList = new paper.CompoundPath(\"\");\n let rec;\n\n for (let i = 0; i < numChambers / 2; i++) {\n const startPoint = new paper.Point(x + i * (chamberWidth + chamberSpacing) + chamberSpacing, y);\n rec = new paper.Path.Rectangle({\n size: [chamberWidth, 2 * chamberLength + feedingChannelWidth],\n point: startPoint,\n fillColor: color,\n strokeWidth: 0\n });\n chamberList.addChild(rec);\n }\n\n chamberList.fillColor = color;\n chamberList.rotate(rotation, new paper.Point(x, y));\n return chamberList;\n }\n}\n","import Template from \"./template\";\nimport paper from \"paper\";\nimport ComponentPort from \"../core/componentPort\";\nimport { LogicalLayerType } from \"../core/init\";\n\nexport default class Gelchannel extends Template {\n constructor() {\n super();\n }\n\n __setupDefinitions(): void {\n this.__unique = {\n position: \"Point\"\n };\n\n this.__heritable = {\n componentSpacing: \"Float\",\n sideWidth: \"Float\",\n mainWidth: \"Float\",\n rotation: \"Float\",\n length: \"Float\",\n height: \"Float\",\n sideheight: \"Float\"\n };\n\n this.__defaults = {\n componentSpacing: 1000,\n sideWidth: 200,\n mainWidth: 500,\n rotation: 0,\n length: 3000,\n height: 250,\n sideheight: 50\n };\n\n this.__units = {\n componentSpacing: \"μm\",\n sideWidth: \"μm\",\n mainWidth: \"μm\",\n rotation: \"°\",\n length: \"μm\",\n height: \"μm\",\n sideheight: \"μm\"\n };\n\n this.__minimum = {\n componentSpacing: 0,\n sideWidth: 20,\n mainWidth: 10,\n length: 1000,\n height: 10,\n sideheight: 10,\n rotation: 0\n };\n\n this.__maximum = {\n componentSpacing: 10000,\n sideWidth: 500,\n mainWidth: 500,\n length: 100 * 1000,\n height: 1200,\n sideheight: 1200,\n rotation: 360\n };\n\n this.__featureParams = {\n componentSpacing: \"componentSpacing\",\n position: \"position\",\n rotation: \"rotation\",\n length: \"length\",\n sideWidth: \"sideWidth\",\n mainWidth: \"mainWidth\",\n height: \"height\",\n sideheight: \"sideheight\"\n };\n\n this.__targetParams = {\n componentSpacing: \"componentSpacing\",\n rotation: \"rotation\",\n length: \"length\",\n sideWidth: \"sideWidth\",\n mainWidth: \"mainWidth\",\n height: \"height\",\n sideheight: \"sideheight\"\n };\n\n this.__placementTool = \"CellPositionTool\";\n\n this.__toolParams = {\n position: \"position\"\n };\n\n this.__renderKeys = [\"FLOW\", \"CELL\"];\n\n this.__mint = \"GEL CHANNEL\";\n\n this.__zOffsetKeys = {\n FLOW: \"height\",\n CELL: \"sideHeight\"\n };\n\n this.__substrateOffset = {\n FLOW: \"0\",\n CELL: \"0\"\n };\n }\n\n getPorts(params: { [k: string]: any }) {\n const ports = [];\n const sideWidth = params.sideWidth;\n const numChambers = 2;\n const length = params.length;\n const mainWidth = params.mainWidth;\n\n ports.push(new ComponentPort(0, sideWidth + mainWidth / 2, \"1\", LogicalLayerType.FLOW));\n ports.push(new ComponentPort((numChambers / 2) * (length + 60) + 60, sideWidth + mainWidth / 2, \"2\", LogicalLayerType.FLOW));\n\n return ports;\n }\n\n render2D(params: { [k: string]: any }, key: string) {\n if (key === \"FLOW\") {\n return this.__drawFlow(params);\n } else if (key === \"CELL\") {\n return this.__drawCell(params);\n }\n\n throw new Error(\"Unknown key: \" + key);\n\n }\n\n render2DTarget(key: string | null, params: { [k: string]: any }) {\n const traps = this.__drawFlow(params);\n traps.addChild(this.__drawCell(params));\n traps.fillColor!.alpha = 0.5;\n return traps;\n }\n\n __drawFlow(params: { [k: string]: any }) {\n const rotation = params.rotation;\n const position = params.position;\n const sideWidth = params.sideWidth;\n const numChambers = 2;\n const length = params.length;\n const mainWidth = params.mainWidth;\n\n console.log(rotation, position, sideWidth, numChambers, length, mainWidth, 60);\n const color = params.color;\n const x = position[0];\n const y = position[1];\n const chamberList = new paper.CompoundPath(\"\");\n chamberList.fillColor = color;\n let traps;\n let channels;\n\n const startPoint = new paper.Point(x, y + sideWidth);\n channels = new paper.Path.Rectangle({\n point: startPoint,\n size: [(numChambers / 2) * (length + 60) + 60, mainWidth],\n fillColor: color,\n strokeWidth: 0\n });\n chamberList.addChild(channels);\n\n traps = new paper.CompoundPath(chamberList);\n traps.fillColor = color;\n const center = new paper.Point(position[0], position[1]);\n traps.rotate(rotation, center);\n return traps;\n }\n\n __drawCell(params: { [k: string]: any }) {\n const rotation = params.rotation;\n const position = params.position;\n const sideWidth = params.sideWidth;\n const numChambers = 2;\n const length = params.length;\n const mainWidth = params.mainWidth;\n const color = params.color;\n const x = position[0];\n const y = position[1];\n const chamberList = new paper.CompoundPath(\"\");\n let rec;\n\n for (let i = 0; i < numChambers / 2; i++) {\n const startPoint = new paper.Point(x + i * (length + 60) + 60, y);\n rec = new paper.Path.Rectangle({\n size: [length, 2 * sideWidth + mainWidth],\n point: startPoint,\n fillColor: color,\n strokeWidth: 0\n });\n chamberList.addChild(rec);\n }\n\n chamberList.fillColor = color;\n const center = new paper.Point(x, y);\n chamberList.rotate(rotation, center);\n return chamberList;\n }\n}\n","import Template from \"./template\";\nimport paper from \"paper\";\nimport ComponentPort from \"../core/componentPort\";\nimport { LogicalLayerType } from \"../core/init\";\n\nexport default class Chamber extends Template {\n constructor() {\n super();\n }\n\n __setupDefinitions(): void {\n this.__unique = {\n position: \"Point\"\n };\n\n this.__heritable = {\n componentSpacing: \"Float\",\n width: \"Float\",\n length: \"Float\",\n height: \"Float\",\n cornerRadius: \"Float\",\n rotation: \"Float\"\n };\n\n this.__defaults = {\n componentSpacing: 1000,\n width: 5000,\n length: 5000,\n height: 250,\n cornerRadius: 200,\n rotation: 0\n };\n\n this.__units = {\n componentSpacing: \"μm\",\n width: \"μm\",\n length: \"μm\",\n height: \"μm\",\n cornerRadius: \"μm\",\n rotation: \"°\"\n };\n\n this.__minimum = {\n componentSpacing: 0,\n width: 5,\n length: 5,\n height: 1,\n cornerRadius: 1,\n rotation: 0\n };\n\n this.__maximum = {\n componentSpacing: 10000,\n width: 50000,\n length: 50000,\n height: 50000,\n cornerRadius: 1000,\n rotation: 360\n };\n\n this.__featureParams = {\n componentSpacing: \"componentSpacing\",\n position: \"position\",\n width: \"width\",\n length: \"length\",\n height: \"height\",\n cornerRadius: \"cornerRadius\",\n rotation: \"rotation\"\n };\n\n this.__targetParams = {\n componentSpacing: \"componentSpacing\",\n position: \"position\",\n width: \"width\",\n length: \"length\",\n height: \"height\",\n cornerRadius: \"cornerRadius\",\n rotation: \"rotation\"\n };\n\n this.__placementTool = \"componentPositionTool\";\n\n this.__toolParams = {\n position: \"position\"\n };\n\n this.__renderKeys = [\"FLOW\"];\n\n this.__mint = \"REACTION CHAMBER\";\n\n this.__zOffsetKeys = {\n FLOW: \"height\"\n };\n\n this.__substrateOffset = {\n FLOW: \"0\"\n };\n }\n\n getPorts(params: { [k: string]: any }) {\n const l = params.length;\n const w = params.width;\n\n const ports = [];\n\n ports.push(new ComponentPort(0, -l / 2, \"1\", LogicalLayerType.FLOW));\n\n ports.push(new ComponentPort(w / 2, 0, \"2\", LogicalLayerType.FLOW));\n\n ports.push(new ComponentPort(0, l / 2, \"3\", LogicalLayerType.FLOW));\n\n ports.push(new ComponentPort(-w / 2, 0, \"4\", LogicalLayerType.FLOW));\n\n return ports;\n }\n\n render2D(params: { [k: string]: any }, key: string) {\n const position = params.position;\n const px = position[0];\n const py = position[1];\n const l = params.length;\n const w = params.width;\n const rotation = params.rotation;\n const color = params.color;\n const radius = params.cornerRadius;\n\n const rendered = new paper.CompoundPath(\"\");\n\n const rec = new paper.Path.Rectangle({\n point: new paper.Point(px - w / 2, py - l / 2),\n size: [w, l],\n radius: radius\n });\n\n rendered.addChild(rec);\n\n rendered.fillColor = color;\n rendered.rotate(rotation, new paper.Point(px, py));\n return rendered;\n }\n\n render2DTarget(key: string | null, params: { [k: string]: any }) {\n if (key === null) {\n key = this.__renderKeys[0];\n }\n const render = this.render2D(params, key);\n render.fillColor!.alpha = 0.5;\n return render;\n }\n}\n","import Template from \"./template\";\nimport paper from \"paper\";\n\nexport default class Connection extends Template {\n constructor() {\n super();\n }\n\n __setupDefinitions(): void {\n this.__unique = {\n start: \"Point\",\n end: \"Point\",\n wayPoints: \"PointArray\",\n segments: \"SegmentArray\"\n };\n\n this.__heritable = {\n connectionSpacing: \"Float\",\n channelWidth: \"Float\",\n height: \"Float\"\n };\n\n this.__defaults = {\n connectionSpacing: 1600,\n channelWidth: 0.8 * 1000,\n height: 250\n };\n\n this.__units = {\n connectionSpacing: \"μm\",\n channelWidth: \"μm\",\n height: \"μm\"\n };\n\n this.__minimum = {\n connectionSpacing: 0,\n channelWidth: 3,\n height: 10\n };\n\n this.__maximum = {\n connectionSpacing: 10000,\n channelWidth: 12000,\n height: 1200\n };\n\n this.__featureParams = {\n connectionSpacing: \"connectionSpacing\",\n start: \"start\",\n end: \"end\",\n wayPoints: \"wayPoints\",\n channelWidth: \"channelWidth\",\n segments: \"segments\",\n height: \"height\"\n };\n\n this.__targetParams = {\n connectionSpacing: \"connectionSpacing\",\n wayPoints: \"wayPoints\",\n channelWidth: \"channelWidth\",\n segments: \"segments\",\n height: \"height\"\n };\n\n this.__placementTool = \"ConnectionTool\";\n\n this.__toolParams = {\n start: \"start\",\n end: \"end\"\n };\n\n this.__renderKeys = [\"FLOW\"];\n\n this.__mint = \"CHANNEL\";\n\n this.__zOffsetKeys = {\n FLOW: \"height\"\n };\n\n this.__substrateOffset = {\n FLOW: \"0\"\n };\n }\n\n render2D(params: { [k: string]: any }, key: string) {\n const start = params.start;\n const end = params.end;\n const color = params.color;\n const width = params.width;\n const wayPoints = params.wayPoints;\n const channelWidth = params.channelWidth;\n const segments = params.segments;\n const connectionpath = new paper.CompoundPath(\"\");\n let startpoint, endpoint;\n\n let p1, p2;\n\n for (const i in segments) {\n const segment = segments[i];\n p1 = segment[0];\n p2 = segment[1];\n startpoint = new paper.Point(p1[0], p1[1]);\n endpoint = new paper.Point(p2[0], p2[1]);\n this.__drawStraightConnection(connectionpath, startpoint, endpoint, channelWidth);\n }\n\n connectionpath.fillColor = color;\n return connectionpath;\n }\n\n __drawStraightConnection(compoundpath: paper.CompoundPath, startpoint: paper.Point, endpoint: paper.Point, channelWidth: number): void {\n // edit the points\n const vec = endpoint.subtract(startpoint);\n const rec = new paper.Path.Rectangle({\n point: startpoint,\n radius: channelWidth / 2,\n size: [vec.length + channelWidth, channelWidth]\n });\n rec.translate(([-channelWidth / 2, -channelWidth / 2] as unknown) as paper.Point);\n rec.rotate(vec.angle, startpoint);\n\n compoundpath.addChild(rec);\n }\n\n render2DTarget(key: string | null, params: { [k: string]: any }) {\n const thickness = params.channelWidth / 5;\n const length = params.channelWidth;\n const x = params.position[0];\n const y = params.position[1];\n const color = params.color;\n let chair = new paper.Path.Rectangle(new paper.Rectangle(x - length / 2, y - thickness / 2, length, thickness));\n let chairtarget = chair.unite(new paper.Path.Rectangle(new paper.Rectangle(x - thickness / 2, y - length / 2, thickness, length)));\n chairtarget.fillColor = color;\n chairtarget.fillColor!.alpha = 0.5;\n return chairtarget;\n }\n}\n","import Template from \"./template\";\nimport paper from \"paper\";\nimport ComponentPort from \"../core/componentPort\";\nimport { LogicalLayerType } from \"../core/init\";\n\nexport default class CurvedMixer extends Template {\n constructor() {\n super();\n }\n\n __setupDefinitions(): void {\n this.__unique = {\n position: \"Point\"\n };\n\n this.__heritable = {\n componentSpacing: \"Float\",\n bendSpacing: \"Float\",\n numberOfBends: \"Float\",\n channelWidth: \"Float\",\n bendLength: \"Float\",\n rotation: \"Float\",\n height: \"Float\"\n };\n\n this.__defaults = {\n componentSpacing: 1000,\n rotation: 0,\n channelWidth: 0.8 * 1000,\n bendSpacing: 1.23 * 1000,\n numberOfBends: 1,\n bendLength: 2.46 * 1000,\n height: 250\n };\n\n this.__units = {\n componentSpacing: \"μm\",\n rotation: \"°\",\n bendSpacing: \"μm\",\n numberOfBends: \"\",\n channelWidth: \"μm\",\n bendLength: \"μm\",\n height: \"μm\"\n };\n\n this.__minimum = {\n componentSpacing: 0,\n rotation: 0,\n channelWidth: 10,\n bendSpacing: 10,\n numberOfBends: 1,\n bendLength: 10,\n height: 10\n };\n\n this.__maximum = {\n componentSpacing: 10000,\n rotation: 360,\n channelWidth: 2000,\n bendSpacing: 6000,\n numberOfBends: 20,\n bendLength: 12 * 1000,\n height: 1200\n };\n\n this.__featureParams = {\n componentSpacing: \"componentSpacing\",\n position: \"position\",\n channelWidth: \"channelWidth\",\n bendSpacing: \"bendSpacing\",\n numberOfBends: \"numberOfBends\",\n rotation: \"rotation\",\n bendLength: \"bendLength\"\n };\n\n this.__targetParams = {\n componentSpacing: \"componentSpacing\",\n channelWidth: \"channelWidth\",\n bendSpacing: \"bendSpacing\",\n numberOfBends: \"numberOfBends\",\n rotation: \"rotation\",\n bendLength: \"bendLength\"\n };\n\n this.__placementTool = \"componentPositionTool\";\n\n this.__toolParams = {\n position: \"position\"\n };\n\n this.__renderKeys = [\"FLOW\"];\n\n this.__mint = \"CURVED MIXER\";\n\n this.__zOffsetKeys = {\n FLOW: \"height\"\n };\n\n this.__substrateOffset = {\n FLOW: \"0\"\n };\n }\n\n getPorts(params: { [k: string]: any }) {\n const channelWidth = params.channelWidth;\n const bendLength = params.bendLength;\n const bendSpacing = params.bendSpacing;\n const numberOfBends = params.numberOfBends;\n\n const ports = [];\n\n ports.push(new ComponentPort(bendLength / 2 + channelWidth, 0, \"1\", LogicalLayerType.FLOW));\n\n ports.push(new ComponentPort(bendLength / 2 + channelWidth, (2 * numberOfBends + 1) * channelWidth + 2 * numberOfBends * bendSpacing, \"2\", LogicalLayerType.FLOW));\n\n return ports;\n }\n\n render2D(params: { [k: string]: any }, key: string) {\n const channelWidth = params.channelWidth;\n const bendLength = params.bendLength;\n const bendSpacing = params.bendSpacing;\n const rotation = params.rotation;\n const numBends = params.numberOfBends;\n const x = params.position[0];\n const y = params.position[1];\n const color = params.color;\n const segHalf = bendLength / 2 + channelWidth;\n const segLength = bendLength + 2 * channelWidth;\n const segBend = bendSpacing + 2 * channelWidth;\n const vRepeat = 2 * bendSpacing + 2 * channelWidth;\n const vOffset = bendSpacing + channelWidth;\n const hOffset = bendLength / 2 + channelWidth / 2;\n const serp = new paper.CompoundPath(\"\");\n\n // draw first segment\n let toprect: paper.Rectangle | paper.PathItem = new paper.Path.Rectangle(new paper.Rectangle(x + channelWidth - 1, y, bendLength / 2 + channelWidth / 2 + 1, channelWidth));\n (toprect as any).closed = true;\n for (let i = 0; i < numBends; i++) {\n // draw left curved segment\n let leftCurve: paper.Path.Arc | paper.PathItem = new paper.Path.Arc({\n from: [x + channelWidth, y + vRepeat * i],\n through: [x + channelWidth - (channelWidth + bendSpacing / 2), y + vRepeat * i + bendSpacing / 2 + channelWidth],\n to: [x + channelWidth, y + vRepeat * i + bendSpacing + 2 * channelWidth]\n });\n (leftCurve as any).closed = true;\n const leftCurveSmall = new paper.Path.Arc({\n from: [x + channelWidth, y + vRepeat * i + bendSpacing + channelWidth],\n through: [x + channelWidth - bendSpacing / 2, y + vRepeat * i + bendSpacing / 2 + channelWidth],\n to: [x + channelWidth, y + vRepeat * i + channelWidth]\n });\n leftCurveSmall.closed = true;\n leftCurve = leftCurve.subtract(leftCurveSmall);\n toprect = toprect.unite(leftCurve);\n // serp.addChild(leftCurve);\n // draw horizontal segment\n let hseg = new paper.Path.Rectangle(new paper.Rectangle(x + channelWidth - 1, y + vOffset + vRepeat * i, bendLength + 2, channelWidth));\n toprect = toprect.unite(hseg);\n // draw right curved segment\n let rightCurve: paper.Path.Arc | paper.PathItem = new paper.Path.Arc({\n from: [x + channelWidth + bendLength, y + vOffset + vRepeat * i],\n through: [x + channelWidth + bendLength + (channelWidth + bendSpacing / 2), y + vOffset + vRepeat * i + bendSpacing / 2 + channelWidth],\n to: [x + channelWidth + bendLength, y + vOffset + vRepeat * i + bendSpacing + 2 * channelWidth]\n });\n (rightCurve as any).closed = true;\n const rightCurveSmall = new paper.Path.Arc({\n from: [x + channelWidth + bendLength, y + vOffset + vRepeat * i + bendSpacing + channelWidth],\n through: [x + channelWidth + bendLength + bendSpacing / 2, y + vOffset + vRepeat * i + bendSpacing / 2 + channelWidth],\n to: [x + channelWidth + bendLength, y + vOffset + vRepeat * i + channelWidth]\n });\n rightCurveSmall.closed = true;\n rightCurve = rightCurve.subtract(rightCurveSmall);\n toprect = toprect.unite(rightCurve);\n\n if (i === numBends - 1) {\n // draw half segment to close\n hseg = new paper.Path.Rectangle(new paper.Rectangle(x + channelWidth / 2 + bendLength / 2, y + vRepeat * (i + 1), (bendLength + channelWidth) / 2 + 1, channelWidth));\n toprect = toprect.unite(hseg);\n } else {\n // draw full segment\n hseg = new paper.Path.Rectangle(new paper.Rectangle(x + channelWidth - 1, y + vRepeat * (i + 1), bendLength + 2, channelWidth));\n toprect = toprect.unite(hseg);\n }\n toprect = toprect.unite(hseg);\n }\n serp.addChild(toprect);\n\n serp.fillColor = color;\n serp.rotate(rotation, new paper.Point(x, y));\n return serp;\n }\n\n render2DTarget(key: string | null, params: { [k: string]: any }) {\n if (key === null) {\n key = this.__renderKeys[0];\n }\n const render = this.render2D(params, key);\n render.fillColor!.alpha = 0.5;\n return render;\n }\n}\n","import Template from \"./template\";\nimport paper from \"paper\";\nimport ComponentPort from \"../core/componentPort\";\nimport { LogicalLayerType } from \"../core/init\";\n\nexport default class DiamondReactionChamber extends Template {\n constructor() {\n super();\n }\n\n __setupDefinitions(): void {\n this.__unique = {\n position: \"Point\"\n };\n\n this.__heritable = {\n componentSpacing: \"Float\",\n rotation: \"Float\",\n channelWidth: \"Float\",\n length: \"Float\",\n width: \"Float\",\n height: \"Float\"\n };\n\n this.__defaults = {\n componentSpacing: 1000,\n rotation: 0,\n channelWidth: 0.8 * 1000,\n width: 1.23 * 1000,\n length: 4.92 * 1000,\n height: 250\n };\n\n this.__units = {\n componentSpacing: \"μm\",\n rotation: \"°\",\n channelWidth: \"μm\",\n length: \"μm\",\n width: \"μm\",\n height: \"μm\"\n };\n\n this.__minimum = {\n componentSpacing: 0,\n channelWidth: 10,\n width: 30,\n length: 120,\n height: 10,\n rotation: 0\n };\n\n this.__maximum = {\n componentSpacing: 10000,\n channelWidth: 2000,\n width: 6000,\n length: 24 * 1000,\n height: 1200,\n rotation: 360\n };\n\n this.__featureParams = {\n componentSpacing: \"componentSpacing\",\n position: \"position\",\n rotation: \"rotation\",\n channelWidth: \"channelWidth\",\n length: \"length\",\n width: \"width\"\n };\n\n this.__targetParams = {\n componentSpacing: \"componentSpacing\",\n channelWidth: \"channelWidth\",\n length: \"length\",\n width: \"width\",\n rotation: \"rotation\"\n };\n\n this.__placementTool = \"componentPositionTool\";\n\n this.__toolParams = {\n position: \"position\"\n };\n\n this.__renderKeys = [\"FLOW\"];\n\n this.__mint = \"DIAMOND REACTION CHAMBER\";\n\n this.__zOffsetKeys = {\n FLOW: \"height\"\n };\n\n this.__substrateOffset = {\n FLOW: \"0\"\n };\n }\n\n getPorts(params: { [k: string]: any }) {\n const channelWidth = params.channelWidth;\n const l = params.length;\n const w = params.width;\n\n const ports = [];\n\n ports.push(new ComponentPort(-l / 2, 0, \"1\", LogicalLayerType.FLOW));\n\n ports.push(new ComponentPort(l / 2, 0, \"2\", LogicalLayerType.FLOW));\n\n return ports;\n }\n\n render2D(params: { [k: string]: any }, key: string) {\n const position = params.position;\n const px = position[0];\n const py = position[1];\n const cw = params.channelWidth;\n const l = params.length;\n const w = params.width;\n const rotation = params.rotation;\n console.log(\"Rotation\", rotation);\n const color = params.color;\n let p0, p1, p2, p3, p4, p5;\n p0 = [px - l / 2, py - cw / 2];\n p1 = [px - l / 2, py + cw / 2];\n p2 = [px, py + w + cw / 2];\n p3 = [px + l / 2, py + cw / 2];\n p4 = [px + l / 2, py - cw / 2];\n p5 = [px, py - cw / 2 - w];\n const hex = new paper.Path();\n hex.add(new paper.Point(p0));\n hex.add(new paper.Point(p1));\n hex.add(new paper.Point(p2));\n hex.add(new paper.Point(p3));\n hex.add(new paper.Point(p4));\n hex.add(new paper.Point(p5));\n hex.closed = true;\n hex.rotate(rotation, new paper.Point(px, py));\n hex.fillColor = color;\n return hex;\n }\n\n render2DTarget(key: string | null, params: { [k: string]: any }) {\n if (key === null) {\n key = this.__renderKeys[0];\n }\n const render = this.render2D(params, key);\n render.fillColor!.alpha = 0.5;\n return render;\n }\n}\n","import Template from \"./template\";\nimport paper from \"paper\";\nimport ComponentPort from \"../core/componentPort\";\nimport { LogicalLayerType } from \"../core/init\";\n\nexport default class DropletGenerator extends Template {\n constructor() {\n super();\n }\n\n __setupDefinitions(): void {\n this.__unique = {\n position: \"Point\"\n };\n\n this.__heritable = {\n componentSpacing: \"Float\",\n orificeSize: \"Float\",\n orificeLength: \"Float\",\n oilInputWidth: \"Float\",\n waterInputWidth: \"Float\",\n outputWidth: \"Float\",\n outputLength: \"Float\",\n height: \"Float\",\n rotation: \"Float\"\n };\n\n this.__defaults = {\n componentSpacing: 1000,\n orificeSize: 0.2 * 1000,\n orificeLength: 0.4 * 1000,\n oilInputWidth: 0.8 * 1000,\n waterInputWidth: 0.6 * 1000,\n outputWidth: 0.6 * 1000,\n outputLength: 0.6 * 1000,\n height: 250,\n rotation: 0\n };\n\n this.__units = {\n componentSpacing: \"μm\",\n orificeSize: \"μm\",\n height: \"μm\",\n orificeLength: \"μm\",\n oilInputWidth: \"μm\",\n waterInputWidth: \"μm\",\n outputWidth: \"μm\",\n outputLength: \"μm\",\n rotation: \"°\"\n };\n\n this.__minimum = {\n componentSpacing: 0,\n orificeSize: 10,\n orificeLength: 10,\n oilInputWidth: 10,\n waterInputWidth: 10,\n outputWidth: 10,\n outputLength: 10,\n height: 10,\n rotation: 0\n };\n\n this.__maximum = {\n componentSpacing: 10000,\n orificeSize: 2000,\n orificeLength: 2000,\n oilInputWidth: 2000,\n waterInputWidth: 2000,\n outputWidth: 2000,\n outputLength: 2000,\n height: 1200,\n rotation: 360\n };\n\n this.__featureParams = {\n componentSpacing: \"componentSpacing\",\n position: \"position\",\n orificeSize: \"orificeSize\",\n orificeLength: \"orificeLength\",\n oilInputWidth: \"oilInputWidth\",\n waterInputWidth: \"waterInputWidth\",\n outputWidth: \"outputWidth\",\n outputLength: \"outputLength\",\n height: \"height\",\n rotation: \"rotation\"\n };\n\n this.__targetParams = {\n componentSpacing: \"componentSpacing\",\n orificeSize: \"orificeSize\",\n orificeLength: \"orificeLength\",\n oilInputWidth: \"oilInputWidth\",\n waterInputWidth: \"waterInputWidth\",\n outputWidth: \"outputWidth\",\n outputLength: \"outputLength\",\n height: \"height\",\n rotation: \"rotation\"\n };\n\n this.__placementTool = \"componentPositionTool\";\n\n this.__toolParams = {\n position: \"position\"\n };\n\n this.__renderKeys = [\"FLOW\"];\n\n this.__mint = \"NOZZLE DROPLET GENERATOR\";\n\n this.__zOffsetKeys = {\n FLOW: \"height\"\n };\n\n this.__substrateOffset = {\n FLOW: \"0\"\n };\n }\n\n getPorts(params: { [k: string]: any }) {\n const orificeSize = params.orificeSize;\n const orificeLength = params.orificeLength;\n const oilInputWidth = params.oilInputWidth;\n const waterInputWidth = params.waterInputWidth;\n const outputWidth = params.outputWidth;\n const outputLength = params.outputLength;\n\n const ports = [];\n\n // Oil Top\n ports.push(new ComponentPort(oilInputWidth / 2, -waterInputWidth / 2, \"1\", LogicalLayerType.FLOW));\n\n // Out\n ports.push(new ComponentPort(oilInputWidth + orificeLength + outputLength, 0, \"2\", LogicalLayerType.FLOW));\n\n // Oil Bottom\n ports.push(new ComponentPort(oilInputWidth / 2, waterInputWidth / 2, \"3\", LogicalLayerType.FLOW));\n\n // Input\n ports.push(new ComponentPort(0, 0, \"4\", LogicalLayerType.FLOW));\n\n return ports;\n }\n\n render2D(params: { [k: string]: any }, key = \"FLOW\") {\n const pos = params.position;\n const x = pos[0];\n const y = pos[1];\n const color = params.color;\n const orificeSize = params.orificeSize;\n const orificeLength = params.orificeLength;\n const oilInputWidth = params.oilInputWidth;\n const waterInputWidth = params.waterInputWidth;\n const outputWidth = params.outputWidth;\n const outputLength = params.outputLength;\n const rotation = params.rotation;\n\n const ret = new paper.Path();\n\n const p1 = new paper.Point(x, y - waterInputWidth / 2);\n\n const p2 = new paper.Point(p1.x + oilInputWidth, p1.y);\n\n const p3 = new paper.Point(p2.x, p2.y + (waterInputWidth / 2 - orificeSize / 2));\n\n const p4 = new paper.Point(p3.x + orificeLength, p3.y);\n\n const p5 = new paper.Point(p4.x, p4.y - (outputWidth / 2 - orificeSize / 2));\n\n const p6 = new paper.Point(p5.x + outputLength, p5.y);\n\n const p7 = new paper.Point(p6.x, p6.y + outputWidth);\n\n const p8 = new paper.Point(p7.x - outputLength, p7.y);\n\n const p9 = new paper.Point(p8.x, p8.y - (outputWidth / 2 - orificeSize / 2));\n\n const p10 = new paper.Point(p9.x - orificeLength, p9.y);\n\n const p11 = new paper.Point(p10.x, p10.y + (waterInputWidth / 2 - orificeSize / 2));\n\n const p12 = new paper.Point(p11.x - oilInputWidth, p11.y);\n\n ret.add(p1);\n ret.add(p2);\n ret.add(p3);\n ret.add(p4);\n ret.add(p5);\n ret.add(p6);\n ret.add(p7);\n ret.add(p8);\n ret.add(p9);\n ret.add(p10);\n ret.add(p11);\n ret.add(p12);\n\n // Rotate the geometry\n ret.rotate(rotation, new paper.Point(pos[0], pos[1]));\n\n ret.closed = true;\n ret.fillColor = color;\n return ret;\n }\n\n render2DTarget(key: string | null, params: { [k: string]: any }) {\n if (key === null) {\n key = this.__renderKeys[0];\n }\n const render = this.render2D(params, key);\n render.fillColor!.alpha = 0.5;\n return render;\n }\n}\n","import Template from \"./template\";\nimport paper from \"paper\";\nimport ComponentPort from \"../core/componentPort\";\nimport { LogicalLayerType } from \"../core/init\";\n\nexport default class GradientGenerator extends Template {\n constructor() {\n super();\n }\n\n __setupDefinitions(): void {\n this.__unique = {\n position: \"Point\"\n };\n\n this.__heritable = {\n componentSpacing: \"Float\",\n bendSpacing: \"Float\",\n numberOfBends: \"Float\",\n channelWidth: \"Float\",\n bendLength: \"Float\",\n in: \"Float\",\n out: \"Float\",\n spacing: \"Float\",\n height: \"Float\",\n rotation: \"Float\"\n };\n\n this.__defaults = {\n componentSpacing: 1000,\n channelWidth: 0.8 * 1000,\n bendSpacing: 1.23 * 1000,\n numberOfBends: 1,\n bendLength: 2.46 * 1000,\n in: 1,\n out: 3,\n spacing: 10000,\n height: 250,\n rotation: 0\n };\n\n this.__units = {\n componentSpacing: \"μm\",\n bendSpacing: \"μm\",\n numberOfBends: \"\",\n channelWidth: \"μm\",\n bendLength: \"μm\",\n in: \"\",\n out: \"\",\n spacing: \"μm\",\n height: \"μm\",\n rotation: \"°\"\n };\n\n this.__minimum = {\n componentSpacing: 0,\n channelWidth: 10,\n bendSpacing: 10,\n numberOfBends: 1,\n bendLength: 10,\n in: 1,\n out: 3,\n spacing: 10,\n height: 10,\n rotation: 0\n };\n\n this.__maximum = {\n componentSpacing: 10000,\n channelWidth: 2000,\n bendSpacing: 6000,\n numberOfBends: 20,\n bendLength: 12 * 1000,\n in: 30,\n out: 90,\n spacing: 90000,\n height: 1200,\n rotation: 360\n };\n\n this.__featureParams = {\n componentSpacing: \"componentSpacing\",\n position: \"position\",\n channelWidth: \"channelWidth\",\n bendSpacing: \"bendSpacing\",\n numberOfBends: \"numberOfBends\",\n rotation: \"rotation\",\n bendLength: \"bendLength\",\n in: \"in\",\n out: \"out\",\n spacing: \"spacing\"\n };\n\n this.__targetParams = {\n componentSpacing: \"componentSpacing\",\n channelWidth: \"channelWidth\",\n bendSpacing: \"bendSpacing\",\n numberOfBends: \"numberOfBends\",\n rotation: \"rotation\",\n bendLength: \"bendLength\",\n in: \"in\",\n out: \"out\",\n spacing: \"spacing\"\n };\n\n this.__placementTool = \"componentPositionTool\";\n\n this.__toolParams = {\n position: \"position\"\n };\n\n this.__renderKeys = [\"FLOW\"];\n\n this.__mint = \"GRADIENT GENERATOR\";\n\n this.__zOffsetKeys = {\n FLOW: \"height\"\n };\n\n this.__substrateOffset = {\n FLOW: \"0\"\n };\n }\n\n getPorts(params: { [k: string]: any }) {\n const bendSpacing = params.bendSpacing;\n const numBends = params.numberOfBends;\n const channelWidth = params.channelWidth;\n const invalue = params.in;\n const outvalue = params.out;\n const spacing = params.spacing; // Center to Center\n\n const ports = [];\n\n const maxstagewidth = (outvalue - 1) * spacing;\n const posx = maxstagewidth / 2;\n\n const stagelength = channelWidth * (2 * numBends + 1) + (2 * numBends + 2) * bendSpacing + channelWidth;\n\n const segBend = bendSpacing + 2 * channelWidth;\n\n const fullLength = (outvalue - 1) * (4 * segBend - 3.5 * channelWidth) + stagelength;\n\n let stagevalue = invalue;\n let totalstagewidth = (stagevalue - 1) * spacing;\n\n let xref = -totalstagewidth / 2;\n let yref = stagelength * (stagevalue - invalue);\n\n const vRepeat = 2 * bendSpacing + 2 * channelWidth;\n\n for (let i = 0; i < invalue; i++) {\n // Generate the ports for each of the inputs\n const x = xref + spacing * i + channelWidth / 2;\n ports.push(new ComponentPort(x, 0, (i + 1).toString(), LogicalLayerType.FLOW));\n }\n\n stagevalue = outvalue;\n totalstagewidth = (stagevalue - 1) * spacing;\n\n xref = -totalstagewidth / 2;\n yref = stagelength * (stagevalue - invalue + 1);\n\n for (let i = 0; i < outvalue; i++) {\n // Generate the ports for each of the outputs\n const x = xref + spacing * i + channelWidth / 2;\n ports.push(new ComponentPort(x, yref + channelWidth, (invalue + 1 + i).toString(), LogicalLayerType.FLOW));\n }\n\n return ports;\n }\n\n render2D(params: { [k: string]: any }, key: string) {\n const position = params.position;\n const bendSpacing = params.bendSpacing;\n const numBends = params.numberOfBends;\n const channelWidth = params.channelWidth;\n const bendLength = params.bendLength;\n const rotation = params.rotation;\n const invalue = params.in;\n const outvalue = params.out;\n const spacing = params.spacing; // Center to Center\n const color = params.color;\n\n const posx = position[0];\n const posy = position[1];\n const stagelength = channelWidth * (2 * numBends + 1) + (2 * numBends + 2) * bendSpacing + channelWidth;\n const gradientgenerator = new paper.CompoundPath(\"\");\n // insertMixer(gradientgenerator, bendSpacing, numBends, channelWidth, bendLength, posx, posy, color);\n // Iterate through each of the stages\n\n // Draw the first stage which is just channels\n const totalstagewidth = (invalue - 1) * spacing;\n let xref = posx - totalstagewidth / 2;\n let yref = posy;\n // Draw straight channels for each of the input lines\n for (let i = 0; i < invalue; i++) {\n const x = xref + spacing * i;\n const y = yref;\n\n // Insert Straight channel\n gradientgenerator.addChild(\n new paper.Path.Rectangle({\n point: new paper.Point(x, y),\n size: [channelWidth, stagelength + channelWidth]\n })\n );\n }\n\n for (let stagevalue = invalue + 1; stagevalue <= outvalue; stagevalue++) {\n // For each stage : do the following\n /*\n Check if each stagevalue is odd or even\n\n if (not last stage) place horizontal bar connecting eveything\n */\n\n // Calculate the total width and start placing mixers\n const totalstagewidth = (stagevalue - 1) * spacing;\n\n xref = posx - totalstagewidth / 2;\n yref = posy + stagelength * (stagevalue - invalue);\n\n // Start from the left\n for (let i = 0; i < stagevalue; i++) {\n const x = xref + spacing * i;\n\n const y = yref;\n // insert the mixer\n this.__insertMixer(gradientgenerator as paper.Path, bendSpacing, numBends, channelWidth, bendLength, x, y, color);\n }\n\n // Insert horizontal bar\n const hbar = new paper.Path.Rectangle({\n point: new paper.Point(xref, yref),\n size: [totalstagewidth, channelWidth],\n fillColor: color,\n strokeWidth: 0\n });\n\n gradientgenerator.addChild(hbar);\n }\n\n gradientgenerator.fillColor = color;\n // console.log(\"testing\");\n\n gradientgenerator.rotate(rotation, new paper.Point(posx, posy));\n\n return gradientgenerator;\n }\n\n __insertMixer(serpentine: paper.Path, bendSpacing: number, numBends: number, channelWidth: number, bendLength: number, x: number, y: number, color: paper.Color): paper.Path {\n const segHalf = bendLength / 2 + channelWidth;\n const segLength = bendLength + 2 * channelWidth;\n const segBend = bendSpacing + 2 * channelWidth;\n const vRepeat = 2 * bendSpacing + 2 * channelWidth;\n const vOffset = bendSpacing + channelWidth;\n const hOffset = bendLength / 2 + channelWidth / 2;\n\n x -= hOffset;\n // TopRectangle\n serpentine.addChild(new paper.Path.Rectangle(new paper.Rectangle(x + hOffset, y, channelWidth, 2 * channelWidth + bendSpacing)));\n y += channelWidth + bendSpacing;\n serpentine.addChild(new paper.Path.Rectangle(new paper.Rectangle(x, y, segHalf + channelWidth / 2, channelWidth)));\n for (let i = 0; i < numBends; i++) {\n serpentine.addChild(new paper.Path.Rectangle(new paper.Rectangle(x, y + vRepeat * i, channelWidth, segBend)));\n serpentine.addChild(new paper.Path.Rectangle(new paper.Rectangle(x, y + vOffset + vRepeat * i, segLength, channelWidth)));\n serpentine.addChild(new paper.Path.Rectangle(new paper.Rectangle(x + channelWidth + bendLength, y + vOffset + vRepeat * i, channelWidth, segBend)));\n if (i === numBends - 1) {\n // draw half segment to close\n serpentine.addChild(new paper.Path.Rectangle(new paper.Rectangle(x + hOffset, y + vRepeat * (i + 1), segHalf, channelWidth)));\n } else {\n // draw full segment\n serpentine.addChild(new paper.Path.Rectangle(new paper.Rectangle(x, y + vRepeat * (i + 1), segLength, channelWidth)));\n }\n }\n\n // Bottom rectabvke\n serpentine.addChild(new paper.Path.Rectangle(new paper.Rectangle(x + hOffset, y + vRepeat * numBends, channelWidth, 2 * channelWidth + bendSpacing)));\n\n return serpentine;\n }\n\n render2DTarget(key: string | null, params: { [k: string]: any }) {\n const render = this.render2D(params, (key = \"FLOW\"));\n render.fillColor!.alpha = 0.5;\n return render;\n }\n}\n","import Template from \"./template\";\nimport paper from \"paper\";\nimport ComponentPort from \"../core/componentPort\";\nimport { LogicalLayerType } from \"../core/init\";\n\nexport default class Mux extends Template {\n constructor() {\n super();\n }\n\n __setupDefinitions(): void {\n this.__unique = {\n position: \"Point\"\n };\n\n this.__heritable = {\n componentSpacing: \"Float\",\n flowChannelWidth: \"Float\",\n rotation: \"Float\",\n spacing: \"Float\",\n in: \"Integer\",\n out: \"Integer\",\n width: \"Float\",\n length: \"Float\",\n height: \"Float\",\n stageLength: \"Float\",\n controlChannelWidth: \"Float\"\n };\n\n this.__defaults = {\n componentSpacing: 1000,\n flowChannelWidth: 0.8 * 1000,\n rotation: 0,\n spacing: 4 * 1000,\n in: 1,\n out: 8,\n width: 1.6 * 1000,\n length: 1.6 * 1000,\n height: 250,\n stageLength: 4000,\n controlChannelWidth: 0.4 * 1000\n };\n\n this.__units = {\n componentSpacing: \"μm\",\n flowChannelWidth: \"μm\",\n rotation: \"°\",\n spacing: \"μm\",\n in: \"\",\n out: \"\",\n width: \"μm\",\n length: \"μm\",\n height: \"μm\",\n stageLength: \"μm\",\n controlChannelWidth: \"μm\"\n };\n\n this.__minimum = {\n componentSpacing: 0,\n flowChannelWidth: 10,\n spacing: 30,\n in: 1,\n out: 2,\n width: 60,\n length: 60,\n height: 10,\n stageLength: 100,\n controlChannelWidth: 10,\n rotation: 0\n };\n\n this.__maximum = {\n componentSpacing: 10000,\n flowChannelWidth: 2000,\n spacing: 12000,\n in: 1,\n out: 128,\n width: 12 * 1000,\n length: 12 * 1000,\n height: 1200,\n stageLength: 6000,\n controlChannelWidth: 2000,\n rotation: 360\n };\n\n this.__featureParams = {\n componentSpacing: \"componentSpacing\",\n position: \"position\",\n flowChannelWidth: \"flowChannelWidth\",\n controlChannelWidth: \"controlChannelWidth\",\n rotation: \"rotation\",\n spacing: \"spacing\",\n width: \"width\",\n length: \"length\",\n in: \"in\",\n out: \"out\",\n stageLength: \"stageLength\"\n };\n\n this.__targetParams = {\n componentSpacing: \"componentSpacing\",\n position: \"position\",\n flowChannelWidth: \"flowChannelWidth\",\n controlChannelWidth: \"controlChannelWidth\",\n rotation: \"rotation\",\n spacing: \"spacing\",\n width: \"width\",\n length: \"length\",\n in: \"in\",\n out: \"out\",\n stageLength: \"stageLength\"\n };\n\n this.__placementTool = \"multilayerPositionTool\";\n\n this.__toolParams = {\n position: \"position\"\n };\n\n this.__renderKeys = [\"FLOW\", \"CONTROL\"];\n\n this.__mint = \"MUX\";\n\n this.__zOffsetKeys = {\n FLOW: \"height\",\n CONTROL: \"height\"\n };\n\n this.__substrateOffset = {\n FLOW: \"0\",\n CONTROL: \"+1\"\n };\n }\n\n __drawFlow(params: { [k: string]: any }): paper.CompoundPath {\n const position = params.position;\n const cw = params.flowChannelWidth;\n let rotation = params.rotation;\n const spacing = params.spacing;\n const ins = params.in;\n const outs = params.out;\n let leafs;\n if (ins < outs) {\n leafs = outs;\n } else {\n leafs = ins;\n rotation += 180;\n }\n const color = params.color;\n const stagelength = params.stageLength;\n const px = position[0];\n const py = position[1];\n\n const levels = Math.ceil(Math.log2(leafs));\n let isodd = false; // This is used to figure out how many lines have to be made\n if (leafs % 2 === 0) {\n isodd = false;\n } else {\n isodd = true;\n }\n const w = spacing * (leafs / 2 + 1);\n const l = (levels + 1) * stagelength;\n\n // console.log(\"CW: \" + cw + \" levels: \"+ levels + \" width: \" + w + \" length: \" + l)\n\n const treepath = new paper.CompoundPath(\"\");\n\n this.__generateMuxTwig(treepath, px, py, cw, stagelength, w, 1, levels);\n\n // Draw the tree\n\n treepath.fillColor = color;\n return (treepath.rotate(rotation, new paper.Point(px, py)) as unknown) as paper.CompoundPath;\n }\n\n __drawControl(params: { [k: string]: any }): paper.CompoundPath {\n const position = params.position;\n const cw = params.flowChannelWidth;\n const ctlcw = params.controlChannelWidth;\n let rotation = params.rotation;\n const spacing = params.spacing;\n const ins = params.in;\n const outs = params.out;\n let leafs;\n if (ins < outs) {\n leafs = outs;\n } else {\n leafs = ins;\n rotation += 180;\n }\n const color = params.color;\n const stagelength = params.stageLength;\n const valvelength = params.length;\n const valvewidth = params.width;\n const px = position[0];\n const py = position[1];\n\n const treeWidth = (leafs - 1) * spacing + leafs * cw + leafs * valvewidth;\n const leftEdge = px - treeWidth / 2;\n const rightEdge = px + treeWidth / 2;\n\n const levels = Math.ceil(Math.log2(leafs));\n\n const isodd = !(leafs % 2);\n const w = spacing * (leafs / 2 + 1);\n const l = (levels + 1) * stagelength;\n\n // console.log(\"CW: \" + cw + \" levels: \"+ levels + \" width: \" + w + \" length: \" + l)\n\n const treepath = new paper.CompoundPath(\"\");\n\n this.__generateMuxControlTwig(treepath, px, py, cw, ctlcw, stagelength, w, 1, levels, valvewidth, valvelength, leftEdge, rightEdge);\n\n // Draw the tree\n\n treepath.fillColor = color;\n return (treepath.rotate(rotation, new paper.Point(px, py)) as unknown) as paper.CompoundPath;\n }\n\n getPorts(params: { [k: string]: any }) {\n const ports = [];\n const cw = params.flowChannelWidth;\n const spacing = params.spacing;\n const ins = params.in;\n const outs = params.out;\n let leafs;\n if (ins < outs) {\n leafs = outs;\n } else {\n leafs = ins;\n }\n const stagelength = params.stageLength;\n\n const levels = Math.ceil(Math.log2(leafs));\n const w = spacing * (leafs / 2 + 1);\n\n const length = levels * (cw + stagelength) + stagelength;\n const width = 2 * 0.5 * w * 2 * Math.pow(0.5, levels);\n\n ports.push(new ComponentPort(0, 0, \"1\", LogicalLayerType.FLOW));\n\n for (let i = 0; i < leafs; i++) {\n ports.push(new ComponentPort(((leafs - 1) * width) / 2 - i * width, length, (2 + i).toString(), LogicalLayerType.FLOW));\n }\n\n let count = 2 + leafs;\n const lstartx = -0.5 * (cw + spacing);\n const lendx = lstartx + cw;\n const lstarty = stagelength + cw;\n const lendy = lstarty + stagelength;\n\n const lcenterx = (lstartx + lendx) / 2;\n const lcentery = lstarty + Math.abs(lstarty - lendy) / 4;\n const valvewidth = params.width;\n\n const treeWidth = (leafs - 1) * spacing + leafs * cw + valvewidth;\n\n const leftEdge = -treeWidth / 2;\n const rightEdge = treeWidth / 2;\n\n const rstartx = 0.5 * (spacing - cw);\n const rendx = rstartx + cw;\n const rstarty = stagelength + cw;\n const rendy = rstarty + stagelength;\n\n const rcenterx = (rstartx + rendx) / 2;\n const rcentery = rstarty + (Math.abs(rstarty - rendy) * 3) / 4;\n\n for (let i = 0; i < Math.log2(leafs); i++) {\n ports.push(new ComponentPort(leftEdge, i * (cw + stagelength) + lcentery, count.toString(), LogicalLayerType.CONTROL));\n count++;\n ports.push(new ComponentPort(rightEdge, i * (cw + stagelength) + rcentery, count.toString(), LogicalLayerType.CONTROL));\n count++;\n }\n\n return ports;\n }\n\n render2D(params: { [k: string]: any }, key: string): paper.CompoundPath {\n if (key === \"FLOW\") {\n return this.__drawFlow(params);\n } else if (key === \"CONTROL\") {\n return this.__drawControl(params);\n }\n throw new Error(\"Unknown key: \" + key);\n }\n\n render2DTarget(key: string | null, params: { [k: string]: any }): paper.CompoundPath {\n const render = this.render2D(params, \"FLOW\");\n render?.addChild(this.render2D(params, \"CONTROL\") as paper.Item);\n render!.fillColor!.alpha = 0.5;\n return render;\n }\n\n __generateMuxTwig(treepath: paper.CompoundPath, px: number, py: number, cw: number, stagelength: number, newspacing: number, level: number, maxlevel: number, islast = false): void {\n // var newspacing = 2 * (spacing + cw);\n const hspacing = newspacing / 2;\n const lex = px - 0.5 * newspacing;\n const ley = py + cw + stagelength;\n const rex = px + 0.5 * newspacing;\n const rey = py + cw + stagelength;\n\n if (level === maxlevel) {\n islast = true;\n // console.log(\"Final Spacing: \" + newspacing)\n }\n\n this.__drawmuxtwig(treepath, px, py, cw, stagelength, newspacing, islast);\n\n if (!islast) {\n this.__generateMuxTwig(treepath, lex, ley, cw, stagelength, hspacing, level + 1, maxlevel);\n this.__generateMuxTwig(treepath, rex, rey, cw, stagelength, hspacing, level + 1, maxlevel);\n }\n }\n\n __drawmuxtwig(treepath: paper.CompoundPath, px: number, py: number, cw: number, stagelength: number, spacing: number, drawleafs = false): paper.CompoundPath {\n // stem\n let startPoint = new paper.Point(px - cw / 2, py);\n let endPoint = new paper.Point(px + cw / 2, py + stagelength);\n let rec = new paper.Path.Rectangle({\n from: startPoint,\n to: endPoint,\n radius: 0,\n strokeWidth: 0\n });\n\n treepath.addChild(rec);\n\n // Draw 2 leafs\n // left leaf\n const lstartx = px - 0.5 * (cw + spacing);\n const lendx = lstartx + cw;\n const lstarty = py + stagelength + cw;\n const lendy = lstarty + stagelength;\n\n // //right leaf\n const rstartx = px + 0.5 * (spacing - cw);\n const rendx = rstartx + cw;\n const rstarty = py + stagelength + cw;\n const rendy = rstarty + stagelength;\n\n if (drawleafs) {\n startPoint = new paper.Point(lstartx, lstarty);\n endPoint = new paper.Point(lendx, lendy);\n rec = new paper.Path.Rectangle({\n from: startPoint,\n to: endPoint,\n radius: 0,\n strokeWidth: 0\n });\n treepath.addChild(rec);\n\n startPoint = new paper.Point(rstartx, rstarty);\n endPoint = new paper.Point(rendx, rendy);\n rec = new paper.Path.Rectangle({\n from: startPoint,\n to: endPoint,\n radius: 0,\n strokeWidth: 0\n });\n treepath.addChild(rec);\n }\n\n // Horizontal bar\n const hstartx = px - 0.5 * (cw + spacing);\n const hendx = rendx;\n const hstarty = py + stagelength;\n const hendy = hstarty + cw;\n startPoint = new paper.Point(hstartx, hstarty);\n endPoint = new paper.Point(hendx, hendy);\n rec = new paper.Path.Rectangle({\n from: startPoint,\n to: endPoint,\n radius: 0,\n strokeWidth: 0\n });\n treepath.addChild(rec);\n return treepath;\n }\n\n __generateMuxControlTwig(\n treepath: paper.CompoundPath,\n px: number,\n py: number,\n cw: number,\n ctlcw: number,\n stagelength: number,\n newspacing: number,\n level: number,\n maxlevel: number,\n valvewidth: number,\n valvelength: number,\n leftEdge: number,\n rightEdge: number,\n islast = false\n ): void {\n // var newspacing = 2 * (spacing + cw);\n const hspacing = newspacing / 2;\n const lex = px - 0.5 * newspacing;\n const ley = py + cw + stagelength;\n const rex = px + 0.5 * newspacing;\n const rey = py + cw + stagelength;\n\n if (level === maxlevel) {\n islast = true;\n // console.log(\"Final Spacing: \" + newspacing)\n }\n\n this.__drawmuxcontroltwig(treepath, px, py, cw, ctlcw, stagelength, newspacing, valvewidth, valvelength, leftEdge, rightEdge, islast);\n\n if (!islast) {\n this.__generateMuxControlTwig(treepath, lex, ley, cw, ctlcw, stagelength, hspacing, level + 1, maxlevel, valvewidth, valvelength, leftEdge, rightEdge);\n this.__generateMuxControlTwig(treepath, rex, rey, cw, ctlcw, stagelength, hspacing, level + 1, maxlevel, valvewidth, valvelength, leftEdge, rightEdge);\n }\n }\n\n __drawmuxcontroltwig(\n treepath: paper.CompoundPath,\n px: number,\n py: number,\n cw: number,\n ctlcw: number,\n stagelength: number,\n spacing: number,\n valvewidth: number,\n valvelength: number,\n leftEdge: number,\n rightEdge: number,\n drawleafs = false\n ): paper.CompoundPath {\n // stem - don't bother with valves\n\n // Draw 2 valves\n // left leaf\n const lstartx = px - 0.5 * (cw + spacing);\n const lendx = lstartx + cw;\n const lstarty = py + stagelength + cw;\n const lendy = lstarty + stagelength;\n\n const lcenterx = (lstartx + lendx) / 2;\n const lcentery = lstarty + Math.abs(lstarty - lendy) / 4;\n\n // //right leaf\n const rstartx = px + 0.5 * (spacing - cw);\n const rendx = rstartx + cw;\n const rstarty = py + stagelength + cw;\n const rendy = rstarty + stagelength;\n\n const rcenterx = (rstartx + rendx) / 2;\n const rcentery = rstarty + (Math.abs(rstarty - rendy) * 3) / 4;\n\n let startPoint = new paper.Point(lcenterx - valvewidth / 2, lcentery - valvelength / 2);\n let endPoint = new paper.Point(lcenterx + valvewidth / 2, lcentery + valvewidth / 2);\n let rec = new paper.Path.Rectangle({\n from: startPoint,\n to: endPoint,\n radius: 0,\n strokeWidth: 0\n });\n treepath.addChild(rec);\n\n const leftChannelStart = new paper.Point(startPoint.x, lcentery - ctlcw / 2);\n const leftChannelEnd = new paper.Point(leftEdge, lcentery + ctlcw / 2);\n\n const leftChannel = new paper.Path.Rectangle({\n from: leftChannelStart,\n to: leftChannelEnd,\n radius: 0,\n strokeWidth: 0\n });\n treepath.addChild(leftChannel);\n\n startPoint = new paper.Point(rcenterx - valvewidth / 2, rcentery - valvelength / 2);\n endPoint = new paper.Point(rcenterx + valvewidth / 2, rcentery + valvewidth / 2);\n rec = new paper.Path.Rectangle({\n from: startPoint,\n to: endPoint,\n radius: 0,\n strokeWidth: 0\n });\n\n treepath.addChild(rec);\n const rightChannelStart = new paper.Point(endPoint.x, rcentery - ctlcw / 2);\n const rightChannelEnd = new paper.Point(rightEdge, rcentery + ctlcw / 2);\n\n const rightChannel = new paper.Path.Rectangle({\n from: rightChannelStart,\n to: rightChannelEnd,\n radius: 0,\n strokeWidth: 0\n });\n treepath.addChild(rightChannel);\n\n return treepath;\n }\n}\n","import Template from \"./template\";\nimport paper from \"paper\";\nimport ComponentPort from \"../core/componentPort\";\nimport { LogicalLayerType } from \"../core/init\";\n\nexport default class Pump extends Template {\n constructor() {\n super();\n }\n\n __setupDefinitions(): void {\n this.__unique = {\n position: \"Point\"\n };\n\n this.__heritable = {\n componentSpacing: \"Float\",\n rotation: \"Float\",\n length: \"Float\",\n width: \"Float\",\n height: \"Float\",\n spacing: \"Float\",\n flowChannelWidth: \"Float\"\n };\n\n this.__defaults = {\n componentSpacing: 1000,\n rotation: 0,\n width: 600,\n length: 300,\n height: 250,\n spacing: 1000,\n flowChannelWidth: 300\n };\n\n this.__units = {\n componentSpacing: \"μm\",\n rotation: \"°\",\n length: \"μm\",\n width: \"μm\",\n height: \"μm\",\n spacing: \"μm\",\n flowChannelWidth: \"μm\"\n };\n\n this.__minimum = {\n componentSpacing: 0,\n rotation: 0,\n width: 30,\n length: 120,\n height: 10,\n spacing: 10,\n flowChannelWidth: 1\n };\n\n this.__maximum = {\n componentSpacing: 10000,\n rotation: 360,\n width: 6000,\n length: 24 * 1000,\n height: 1200,\n spacing: 10000,\n flowChannelWidth: 10000\n };\n\n this.__featureParams = {\n componentSpacing: \"componentSpacing\",\n position: \"position\",\n length: \"length\",\n width: \"width\",\n rotation: \"rotation\",\n spacing: \"spacing\",\n flowChannelWidth: \"flowChannelWidth\"\n };\n\n this.__targetParams = {\n componentSpacing: \"componentSpacing\",\n length: \"length\",\n width: \"width\",\n rotation: \"rotation\",\n spacing: \"spacing\",\n flowChannelWidth: \"flowChannelWidth\"\n };\n\n this.__placementTool = \"multilayerPositionTool\";\n\n this.__toolParams = {\n position: \"position\"\n };\n\n this.__renderKeys = [\"FLOW\", \"CONTROL\"];\n\n this.__mint = \"PUMP\";\n\n this.__zOffsetKeys = {\n FLOW: \"height\",\n CONTROL: \"height\"\n };\n\n this.__substrateOffset = {\n FLOW: \"0\",\n CONTROL: \"+1\"\n };\n }\n\n getPorts(params: { [k: string]: any }) {\n const l = params.length;\n const w = params.width;\n const spacing = params.spacing;\n\n const ports = [];\n ports.push(new ComponentPort(0, -l / 2 - spacing, \"1\", LogicalLayerType.FLOW));\n ports.push(new ComponentPort(0, l / 2 + spacing, \"2\", LogicalLayerType.FLOW));\n ports.push(new ComponentPort(0, -spacing, \"3\", LogicalLayerType.CONTROL));\n ports.push(new ComponentPort(0, 0, \"4\", LogicalLayerType.CONTROL));\n ports.push(new ComponentPort(0, spacing, \"5\", LogicalLayerType.CONTROL));\n\n return ports;\n }\n\n __drawFlow(params: { [k: string]: any }) {\n let rec;\n const position = params.position;\n const px = position[0];\n const py = position[1];\n const l = params.length;\n const w = params.width;\n const color = params.color;\n const rotation = params.rotation;\n const spacing = params.spacing;\n const channelwidth = params.flowChannelWidth;\n\n const startX = px - w / 2;\n const startY = py - l / 2;\n const endX = px + w / 2;\n const endY = py + l / 2;\n\n const ret = new paper.CompoundPath(\"\");\n\n const startPoint = new paper.Point(startX, startY);\n const endPoint = new paper.Point(endX, endY);\n\n rec = new paper.Path.Rectangle({\n from: new paper.Point(px - channelwidth / 2, py - spacing - l / 2),\n to: new paper.Point(px + channelwidth / 2, py + spacing + l / 2)\n });\n\n ret.addChild(rec);\n\n ret.fillColor = color;\n ret.rotate(rotation, new paper.Point(px, py));\n return ret;\n }\n\n __drawControl(params: { [k: string]: any }) {\n let rec;\n const position = params.position;\n const px = position[0];\n const py = position[1];\n const l = params.length;\n const w = params.width;\n const color = params.color;\n const rotation = params.rotation;\n const spacing = params.spacing;\n\n const startX = px - w / 2;\n const startY = py - l / 2;\n const endX = px + w / 2;\n const endY = py + l / 2;\n\n const ret = new paper.CompoundPath(\"\");\n\n const startPoint = new paper.Point(startX, startY);\n const endPoint = new paper.Point(endX, endY);\n\n rec = new paper.Path.Rectangle({\n from: startPoint,\n to: endPoint,\n radius: 0,\n fillColor: color,\n strokeWidth: 0\n });\n\n ret.addChild(rec);\n\n const topcenter = new paper.Point(px, py - spacing);\n\n rec = new paper.Path.Rectangle({\n from: new paper.Point(topcenter.x - w / 2, topcenter.y - l / 2),\n to: new paper.Point(topcenter.x + w / 2, topcenter.y + l / 2)\n });\n\n ret.addChild(rec);\n\n const bottomcenter = new paper.Point(px, py + spacing);\n rec = new paper.Path.Rectangle({\n from: new paper.Point(bottomcenter.x - w / 2, bottomcenter.y - l / 2),\n to: new paper.Point(bottomcenter.x + w / 2, bottomcenter.y + l / 2)\n });\n\n ret.addChild(rec);\n\n ret.fillColor = color;\n ret.rotate(rotation, new paper.Point(px, py));\n return ret;\n }\n\n render2D(params: { [k: string]: any }, key = \"FLOW\") {\n if (key === \"FLOW\") {\n return this.__drawFlow(params);\n } else if (key === \"CONTROL\") {\n return this.__drawControl(params);\n }\n\n throw new Error(\"Unknown key: \" + key);\n }\n\n render2DTarget(key: string | null, params: { [k: string]: any }) {\n const ret = new paper.CompoundPath(\"\");\n const flow = this.render2D(params, \"FLOW\");\n const control = this.render2D(params, \"CONTROL\");\n ret.addChild(control as paper.Item);\n ret.addChild(flow as paper.Item);\n ret.fillColor = params.color;\n ret.fillColor!.alpha = 0.5;\n return ret;\n }\n}\n","import Template from \"./template\";\nimport paper from \"paper\";\nimport ComponentPort from \"../core/componentPort\";\nimport { LogicalLayerType } from \"../core/init\";\n\nexport default class Pump3D extends Template {\n constructor() {\n super();\n }\n\n __setupDefinitions(): void {\n this.__unique = {\n position: \"Point\"\n };\n\n this.__heritable = {\n componentSpacing: \"Float\",\n valveRadius: \"Float\",\n height: \"Float\",\n gap: \"Float\",\n rotation: \"Float\",\n spacing: \"Float\",\n flowChannelWidth: \"Float\"\n };\n\n this.__defaults = {\n componentSpacing: 1000,\n valveRadius: 1.2 * 1000,\n height: 250,\n gap: 0.6 * 1000,\n width: 2.4 * 1000,\n length: 2.4 * 1000,\n rotation: 90,\n spacing: 5000,\n flowChannelWidth: 300\n };\n\n this.__units = {\n componentSpacing: \"μm\",\n valveRadius: \"μm\",\n height: \"μm\",\n gap: \"μm\",\n width: \"μm\",\n length: \"μm\",\n rotation: \"°\",\n spacing: \"μm\",\n flowChannelWidth: \"μm\"\n };\n\n this.__minimum = {\n componentSpacing: 0,\n valveRadius: 0.1 * 100,\n height: 0.1 * 100,\n gap: 0.5 * 10,\n rotation: 0,\n spacing: 10,\n flowChannelWidth: 1\n };\n\n this.__maximum = {\n componentSpacing: 10000,\n valveRadius: 0.2 * 10000,\n height: 1.2 * 1000,\n gap: 0.1 * 10000,\n rotation: 360,\n spacing: 10000,\n flowChannelWidth: 10000\n };\n\n this.__featureParams = {\n componentSpacing: \"componentSpacing\",\n position: \"position\",\n rotation: \"rotation\",\n valveRadius: \"valveRadius\",\n flowChannelWidth: \"flowChannelWidth\",\n spacing: \"spacing\",\n gap: \"gap\"\n };\n\n this.__targetParams = {\n componentSpacing: \"componentSpacing\",\n rotation: \"rotation\",\n valveRadius: \"valveRadius\",\n flowChannelWidth: \"flowChannelWidth\",\n spacing: \"spacing\",\n gap: \"gap\"\n };\n\n this.__placementTool = \"multilayerPositionTool\";\n\n this.__toolParams = {\n position: \"position\"\n };\n\n this.__renderKeys = [\"FLOW\", \"CONTROL\", \"INVERSE\"];\n\n this.__mint = \"PUMP3D\";\n\n this.__zOffsetKeys = {\n FLOW: \"height\",\n CONTROL: \"height\",\n INVERSE: \"height\"\n };\n\n this.__substrateOffset = {\n FLOW: \"0\",\n CONTROL: \"+1\",\n INVERSE: \"0\"\n };\n }\n\n getPorts(params: { [k: string]: any }) {\n const radius = params.valveRadius;\n const spacing = params.spacing;\n\n const ports = [];\n\n ports.push(new ComponentPort(0, -spacing - radius, \"1\", LogicalLayerType.FLOW));\n ports.push(new ComponentPort(0, spacing + radius, \"2\", LogicalLayerType.FLOW));\n\n ports.push(new ComponentPort(0, -spacing, \"3\", LogicalLayerType.CONTROL));\n\n ports.push(new ComponentPort(0, 0, \"4\", LogicalLayerType.CONTROL));\n\n ports.push(new ComponentPort(0, spacing, \"5\", LogicalLayerType.CONTROL));\n return ports;\n }\n\n render2D(params: { [k: string]: any }, key = \"FLOW\") {\n if (key === \"FLOW\") {\n return this.__drawFlow(params);\n } else if (key === \"CONTROL\") {\n return this.__drawControl(params);\n } else if (key === \"INVERSE\") {\n return this.__drawInverse(params);\n }\n throw new Error(\"Unknown key: \" + key);\n\n }\n\n render2DTarget(key: string | null, params: { [k: string]: any }) {\n const ret = new paper.CompoundPath(\"\");\n const flow = this.render2D(params, \"FLOW\");\n const control = this.render2D(params, \"CONTROL\");\n ret.addChild(control as paper.Item);\n ret.addChild(flow as paper.Item);\n ret.fillColor = params.color;\n ret.fillColor!.alpha = 0.5;\n return ret;\n }\n\n __drawFlow(params: { [k: string]: any }) {\n let valve;\n let cutout;\n let circ;\n let center;\n const ret = new paper.CompoundPath(\"\");\n\n const position = params.position;\n const gap = params.gap;\n const radius = params.valveRadius;\n const color = params.color;\n const rotation = params.rotation;\n const spacing = params.spacing;\n const channelwidth = params.flowChannelWidth;\n\n center = new paper.Point(position[0], position[1]);\n // let h0p0, h0p1, h0p2, h1p0, h1p1, h1p2;\n circ = new paper.Path.Circle(center, radius);\n // circ.fillColor = color;\n // if (String(color) === \"3F51B5\") {\n cutout = new paper.Path.Rectangle({\n from: new paper.Point(position[0] - radius, position[1] - gap / 2),\n to: new paper.Point(position[0] + radius, position[1] + gap / 2)\n });\n // cutout.fillColor = \"white\";\n valve = circ.subtract(cutout);\n ret.addChild(valve);\n\n const bottomcenter = new paper.Point(position[0], position[1] + spacing);\n circ = new paper.Path.Circle(bottomcenter, radius);\n // circ.fillColor = color;\n // if (String(color) === \"3F51B5\") {\n cutout = new paper.Path.Rectangle({\n from: new paper.Point(bottomcenter.x - radius, bottomcenter.y - gap / 2),\n to: new paper.Point(bottomcenter.x + radius, bottomcenter.y + gap / 2)\n });\n // cutout.fillColor = \"white\";\n valve = circ.subtract(cutout);\n ret.addChild(valve);\n\n const topcenter = new paper.Point(position[0], position[1] - spacing);\n\n circ = new paper.Path.Circle(topcenter, radius);\n // circ.fillColor = color;\n // if (String(color) === \"3F51B5\") {\n cutout = new paper.Path.Rectangle({\n from: new paper.Point(topcenter.x - radius, topcenter.y - gap / 2),\n to: new paper.Point(topcenter.x + radius, topcenter.y + gap / 2)\n });\n // cutout.fillColor = \"white\";\n valve = circ.subtract(cutout);\n ret.addChild(valve);\n\n // Create the channels that go through\n const bottomchannel = new paper.Path.Rectangle({\n from: new paper.Point(bottomcenter.x - channelwidth / 2, bottomcenter.y - gap / 2),\n to: new paper.Point(center.x + channelwidth / 2, center.y + gap / 2)\n });\n\n ret.addChild(bottomchannel);\n\n const topchannel = new paper.Path.Rectangle({\n from: new paper.Point(topcenter.x - channelwidth / 2, topcenter.y + gap / 2),\n to: new paper.Point(center.x + channelwidth / 2, center.y - gap / 2)\n });\n\n ret.addChild(topchannel);\n\n ret.rotate(rotation, center);\n ret.fillColor = color;\n\n return ret;\n }\n\n __drawControl(params: { [k: string]: any }) {\n let circ;\n const position = params.position;\n const radius = params.valveRadius;\n const color = params.color;\n const rotation = params.rotation;\n const spacing = params.spacing;\n\n const ret = new paper.CompoundPath(\"\");\n\n const center = new paper.Point(position[0], position[1]);\n\n circ = new paper.Path.Circle(center, radius);\n ret.addChild(circ);\n\n const topcenter = new paper.Point(position[0], position[1] - spacing);\n circ = new paper.Path.Circle(topcenter, radius);\n ret.addChild(circ);\n\n const bottomcenter = new paper.Point(position[0], position[1] + spacing);\n circ = new paper.Path.Circle(bottomcenter, radius);\n ret.addChild(circ);\n\n ret.rotate(rotation, center);\n ret.fillColor = color;\n return ret;\n }\n\n __drawInverse(params: { [k: string]: any }) {\n let circ;\n const position = params.position;\n const radius = params.valveRadius;\n const color = params.color;\n const rotation = params.rotation;\n const spacing = params.spacing;\n\n const ret = new paper.CompoundPath(\"\");\n\n const center = new paper.Point(position[0], position[1]);\n\n circ = new paper.Path.Circle(center, radius);\n ret.addChild(circ);\n\n const topcenter = new paper.Point(position[0], position[1] - spacing);\n circ = new paper.Path.Circle(topcenter, radius);\n ret.addChild(circ);\n\n const bottomcenter = new paper.Point(position[0], position[1] + spacing);\n circ = new paper.Path.Circle(bottomcenter, radius);\n ret.addChild(circ);\n\n ret.rotate(rotation, center);\n ret.fillColor = color;\n return ret;\n }\n}\n","import Template from \"./template\";\nimport paper from \"paper\";\n\nexport default class RoundedChannel extends Template {\n constructor() {\n super();\n }\n\n __setupDefinitions(): void {\n this.__unique = {\n start: \"Point\",\n end: \"Point\"\n };\n\n this.__heritable = {\n channelWidth: \"Float\",\n height: \"Float\"\n };\n\n this.__defaults = {\n channelWidth: 0.8 * 1000,\n height: 250\n };\n\n this.__units = {\n channelWidth: \"μm\",\n height: \"μm\"\n };\n\n this.__minimum = {\n channelWidth: 3,\n height: 10\n };\n\n this.__maximum = {\n channelWidth: 2000,\n height: 1200\n };\n\n this.__featureParams = {\n start: \"start\",\n end: \"end\",\n width: \"channelWidth\"\n };\n\n this.__targetParams = {\n diameter: \"channelWidth\"\n };\n\n this.__placementTool = \"DragTool\";\n\n this.__toolParams = {\n start: \"start\",\n end: \"end\"\n };\n\n this.__renderKeys = [\"FLOW\"];\n\n this.__mint = \"ROUNDED CHANNEL\";\n\n this.__zOffsetKeys = {\n FLOW: \"height\"\n };\n\n this.__substrateOffset = {\n FLOW: \"0\"\n };\n }\n\n render2D(params: { [k: string]: any }, key: string) {\n const start = params.start;\n const end = params.end;\n const color = params.color;\n const width = params.width;\n const baseColor = params.baseColor;\n const startPoint = new paper.Point(start[0], start[1]);\n const endPoint = new paper.Point(end[0], end[1]);\n const vec = endPoint.subtract(startPoint);\n const rec = new paper.Path.Rectangle({\n size: [vec.length + width, width],\n point: start,\n radius: width / 2,\n fillColor: color,\n strokeWidth: 0\n });\n rec.translate(([-width / 2, -width / 2] as unknown) as paper.Point);\n rec.rotate(vec.angle, start);\n return rec;\n }\n\n render2DTarget(key: string | null, params: { [k: string]: any }) {\n const position = params.position;\n const radius = params.diameter;\n const color1 = params.color;\n const pos = new paper.Point(position[0], position[1]);\n const outerCircle = new paper.Path.Circle(pos, radius);\n outerCircle.fillColor = color1;\n return outerCircle;\n }\n}\n","import Template from \"./template\";\nimport paper from \"paper\";\nimport ComponentPort from \"../core/componentPort\";\nimport { LogicalLayerType } from \"../core/init\";\n\nexport default class thermoCycler extends Template {\n constructor() {\n super();\n }\n\n __setupDefinitions(): void {\n this.__unique = {\n position: \"Point\"\n };\n this.__heritable = {\n componentSpacing: \"Float\",\n rotation: \"Float\",\n width: \"Float\",\n length: \"Float\",\n height: \"Float\",\n temperature: \"Float\"\n };\n this.__defaults = {\n componentSpacing: 1000,\n rotation: 0,\n width: 20 * 1000,\n length: 40 * 1000,\n height: 5 * 1000,\n temperature: 0.03 * 1000\n };\n this.__units = {\n componentSpacing: \"μm\",\n rotation: \"°\",\n width: \"μm\",\n length: \"μm\",\n height: \"μm\",\n temperature: \"°C\"\n };\n this.__minimum = {\n componentSpacing: 0,\n rotation: 0,\n width: 10 * 1000,\n length: 10 * 1000,\n height: 1.25 * 1000,\n temperature: 0 * 1000\n };\n this.__maximum = {\n componentSpacing: 10000,\n rotation: 90,\n width: 60 * 1000,\n length: 60 * 1000,\n height: 10 * 1000,\n temperature: 0.1 * 1000\n };\n this.__placementTool = \"multilayerPositionTool\";\n this.__toolParams = {\n position: \"position\"\n };\n\n this.__featureParams = {\n componentSpacing: \"componentSpacing\",\n position: \"position\",\n rotation: \"rotation\",\n length: \"length\",\n width: \"width\",\n temperature: \"temperature\"\n };\n\n this.__targetParams = {\n componentSpacing: \"componentSpacing\",\n rotation: \"rotation\",\n length: \"length\",\n width: \"width\",\n temperature: \"temperature\"\n };\n\n this.__renderKeys = [\"FLOW\"];\n\n this.__mint = \"THERMO CYCLER\";\n\n this.__zOffsetKeys = {\n FLOW: \"height\"\n };\n\n this.__substrateOffset = {\n FLOW: \"0\"\n };\n }\n\n render2D(params: { [k: string]: any }, key: string) {\n const position = params.position;\n const rotation = params.rotation;\n const px = position[0];\n const py = position[1];\n const l = params.length;\n const w = params.width;\n const color = params.color;\n const startX = px - w / 2;\n const startY = py - l / 2;\n const endX = px + w / 2;\n const endY = py + l / 2;\n const startPoint = new paper.Point(startX, startY);\n const endPoint = new paper.Point(endX, endY);\n const rendered = new paper.CompoundPath(\"\");\n const cirrad = l / 4;\n const centerr = new paper.Point(px - w, py - l);\n\n const rec = new paper.Path.Rectangle({\n from: startPoint,\n to: endPoint,\n radius: 0,\n fillColor: color,\n strokeWidth: 0\n });\n rendered.addChild(rec);\n\n // let cir = new paper.Path.Circle({\n // center: centerr,\n // radius: cirrad,\n // fillColor: 'black'\n // })\n // rendered.addChild(cir);\n\n rendered.fillColor = color;\n // cir.fillColor = 'black';\n // rec.addChild(cir)\n rendered.rotate(rotation, new paper.Point(px, py)); \n return rendered;\n }\n\n render2DTarget(key: string | null, params: { [k: string]: any }) {\n if (key === null) {\n key = this.__renderKeys[0];\n }\n const render = this.render2D(params, key);\n render.fillColor!.alpha = 0.5;\n return render;\n }\n\n getPorts(params: { [k: string]: any }) {\n const l = params.length;\n const w = params.width;\n\n const ports = [];\n\n ports.push(new ComponentPort(-w / 2, -l / 6, \"1\", LogicalLayerType.CONTROL));\n ports.push(new ComponentPort(-w / 2, l / 6, \"2\", LogicalLayerType.CONTROL));\n\n return ports;\n }\n}\n","import Template from \"./template\";\nimport paper from \"paper\";\n\nexport default class Transition extends Template {\n constructor() {\n super();\n }\n\n __setupDefinitions(): void {\n this.__unique = {\n position: \"Point\"\n };\n\n this.__heritable = {\n cw1: \"Float\",\n cw2: \"Float\",\n length: \"Float\",\n rotation: \"Float\",\n height: \"Float\"\n };\n\n this.__defaults = {\n cw1: 0.8 * 1000,\n cw2: 0.9 * 1000,\n length: 1.0 * 1000,\n rotation: 0,\n height: 250\n };\n\n this.__units = {\n cw1: \"μm\",\n cw2: \"μm\",\n length: \"μm\",\n rotation: \"°\",\n height: \"μm\"\n };\n\n this.__minimum = {\n cw1: 3,\n cw2: 3,\n length: 10,\n height: 10,\n rotation: 0\n };\n\n this.__maximum = {\n rotation: 180,\n cw1: 2000,\n cw2: 2000,\n length: 1200,\n height: 1200\n };\n\n this.__featureParams = {\n position: \"position\",\n cw1: \"cw1\",\n cw2: \"cw2\",\n length: \"length\",\n rotation: \"rotation\"\n };\n\n this.__targetParams = {\n cw1: \"cw1\",\n cw2: \"cw2\",\n length: \"length\",\n rotation: \"rotation\"\n };\n\n this.__placementTool = \"PositionTool\";\n\n this.__toolParams = {\n position: \"position\"\n };\n\n this.__renderKeys = [\"FLOW\"];\n\n this.__mint = \"TRANSITION\";\n\n this.__zOffsetKeys = {\n FLOW: \"height\"\n };\n\n this.__substrateOffset = {\n FLOW: \"0\"\n };\n }\n\n render2D(params: { [k: string]: any }, key: string): paper.Path {\n const position = params.position;\n const cw1 = params.cw1;\n const cw2 = params.cw2;\n const length = params.length;\n const rotation = params.rotation;\n const color = params.color;\n const trap = new paper.Path();\n\n trap.add(new paper.Point(position[0] - cw1 / 2, position[1]));\n trap.add(new paper.Point(position[0] + cw1 / 2, position[1]));\n trap.add(new paper.Point(position[0] + cw2 / 2, position[1] + length));\n trap.add(new paper.Point(position[0] - cw2 / 2, position[1] + length));\n // trap.add(new paper.Point(position[0] - cw1/2, position[1]));\n\n trap.closed = true;\n trap.fillColor = color;\n return (trap.rotate(rotation, new paper.Point(position[0], position[1])) as unknown) as paper.Path;\n }\n\n render2DTarget(key: string | null, params: { [k: string]: any }): paper.Path {\n if (key === null) {\n key = this.__renderKeys[0];\n }\n const render = this.render2D(params, key);\n render.fillColor!.alpha = 0.5;\n return render;\n }\n}\n","import Template from \"./template\";\nimport paper from \"paper\";\nimport ComponentPort from \"../core/componentPort\";\nimport { LogicalLayerType } from \"../core/init\";\n\nexport default class Transposer extends Template {\n constructor() {\n super();\n }\n\n __setupDefinitions(): void {\n this.__unique = {\n position: \"Point\"\n };\n\n this.__heritable = {\n componentSpacing: \"Float\",\n rotation: \"Float\",\n valveRadius: \"Float\",\n height: \"Float\",\n valveGap: \"Float\",\n valveSpacing: \"Float\",\n flowChannelWidth: \"Float\",\n controlChannelWidth: \"Float\"\n };\n\n this.__defaults = {\n componentSpacing: 1000,\n rotation: 0,\n valveRadius: 1.2 * 1000,\n height: 250,\n valveGap: 0.6 * 1000,\n valveSpacing: 0.6 * 1000,\n flowChannelWidth: 500,\n controlChannelWidth: 500\n };\n\n this.__units = {\n componentSpacing: \"μm\",\n rotation: \"°\",\n valveRadius: \"μm\",\n height: \"μm\",\n valveGap: \"μm\",\n valveSpacing: \"μm\",\n flowChannelWidth: \"μm\",\n controlChannelWidth: \"μm\"\n };\n\n this.__minimum = {\n componentSpacing: 0,\n valveRadius: 0.1 * 100,\n height: 0.1 * 100,\n valveGap: 0.5 * 10,\n valveSpacing: 0.1 * 1000,\n flowChannelWidth: 0.1,\n controlChannelWidth: 0.1,\n rotation: 0\n };\n\n this.__maximum = {\n componentSpacing: 10000,\n valveRadius: 0.2 * 10000,\n height: 1.2 * 1000,\n valveGap: 0.1 * 10000,\n valveSpacing: 0.1 * 10000,\n flowChannelWidth: 0.1 * 10000,\n controlChannelWidth: 0.1 * 10000,\n rotation: 360\n };\n\n this.__featureParams = {\n componentSpacing: \"componentSpacing\",\n position: \"position\",\n rotation: \"rotation\",\n valveRadius: \"valveRadius\",\n valveGap: \"valveGap\",\n valveSpacing: \"valveSpacing\",\n flowChannelWidth: \"flowChannelWidth\",\n controlChannelWidth: \"controlChannelWidth\"\n };\n\n this.__targetParams = {\n componentSpacing: \"componentSpacing\",\n position: \"position\",\n rotation: \"rotation\",\n valveRadius: \"valveRadius\",\n valveGap: \"valveGap\",\n valveSpacing: \"valveSpacing\",\n flowChannelWidth: \"flowChannelWidth\",\n controlChannelWidth: \"controlChannelWidth\"\n };\n\n this.__placementTool = \"multilayerPositionTool\";\n\n this.__toolParams = {\n position: \"position\"\n };\n\n this.__renderKeys = [\"FLOW\", \"CONTROL\", \"INVERSE\"];\n\n this.__mint = \"TRANSPOSER\";\n\n this.__zOffsetKeys = {\n FLOW: \"height\",\n CONTROL: \"height\",\n INVERSE: \"height\"\n };\n\n this.__substrateOffset = {\n FLOW: \"0\",\n CONTROL: \"+1\",\n INVERSE: \"0\"\n };\n }\n\n getPorts(params: { [k: string]: any }) {\n const ports = [];\n\n const radius = params.valveRadius;\n const channelWidth = params.flowChannelWidth;\n const valvespacing = params.valveSpacing;\n\n ports.push(new ComponentPort(0, 0, \"1\", LogicalLayerType.FLOW));\n ports.push(new ComponentPort(6 * valvespacing + 4 * radius + 3 * channelWidth, 0, \"2\", LogicalLayerType.FLOW));\n ports.push(new ComponentPort(0, 2 * channelWidth + 4 * valvespacing + 2 * 2 * radius, \"3\", LogicalLayerType.FLOW));\n ports.push(new ComponentPort(6 * valvespacing + 4 * radius + 3 * channelWidth, 2 * channelWidth + 4 * valvespacing + 2 * 2 * radius, \"4\", LogicalLayerType.FLOW));\n\n ports.push(new ComponentPort(-2 * radius - channelWidth / 2, channelWidth + 2 * valvespacing + 2 * radius, \"5\", LogicalLayerType.CONTROL));\n ports.push(new ComponentPort(5 * valvespacing + 6 * radius + 3 * channelWidth, channelWidth + 2 * valvespacing + 2 * radius, \"6\", LogicalLayerType.CONTROL));\n\n return ports;\n }\n\n render2D(params: { [k: string]: any }, key = \"FLOW\") {\n if (key === \"FLOW\") {\n return this.__drawFlow(params);\n } else if (key === \"CONTROL\") {\n return this.__drawControl(params);\n }\n\n throw new Error(\"Unknown key: \" + key);\n\n }\n\n render2DTarget(key: string | null, params: { [k: string]: any }) {\n const ret = new paper.CompoundPath(\"\");\n const flow = this.render2D(params, \"FLOW\");\n const control = this.render2D(params, \"CONTROL\");\n ret.addChild(control as paper.CompoundPath);\n ret.addChild(flow as paper.CompoundPath);\n ret.fillColor = params.color;\n ret.fillColor!.alpha = 0.5;\n return ret;\n }\n\n __drawFlow(params: { [k: string]: any }) {\n const position = params.position;\n const valveGap = params.valveGap;\n const radius = params.valveRadius;\n const color = params.color;\n const rotation = params.rotation;\n const channelWidth = params.flowChannelWidth;\n const valvespacing = params.valveSpacing;\n const transposer_flow = new paper.CompoundPath(\"\");\n\n const px = position[0];\n const py = position[1];\n\n // Draw top left channel\n let topleftpoint = new paper.Point(px, py - channelWidth / 2);\n let bottomrightpoint = new paper.Point(px + 4 * valvespacing + 2 * radius + 2 * channelWidth, py + channelWidth / 2);\n let channel = new paper.Path.Rectangle(topleftpoint, bottomrightpoint);\n\n transposer_flow.addChild(channel);\n\n // Draw Valve\n this.__createTransposerValve(transposer_flow, bottomrightpoint.x + radius, topleftpoint.y + channelWidth / 2, valveGap, radius, \"H\", channelWidth);\n\n // Draw top right channel\n topleftpoint = new paper.Point(px + 4 * valvespacing + 4 * radius + 2 * channelWidth, py - channelWidth / 2);\n bottomrightpoint = new paper.Point(px + 6 * valvespacing + 4 * radius + 3 * channelWidth, py + channelWidth / 2);\n channel = new paper.Path.Rectangle(topleftpoint, bottomrightpoint);\n\n transposer_flow.addChild(channel);\n\n // Draw middle channels\n topleftpoint = new paper.Point(px + 3 * valvespacing + channelWidth + 2 * radius, py + channelWidth / 2);\n bottomrightpoint = new paper.Point(topleftpoint.x + channelWidth, topleftpoint.y + valvespacing);\n channel = new paper.Path.Rectangle(topleftpoint, bottomrightpoint);\n\n transposer_flow.addChild(channel);\n this.__createTransposerValve(transposer_flow, topleftpoint.x + channelWidth / 2, bottomrightpoint.y + radius, valveGap, radius, \"V\", channelWidth);\n\n // 2\n topleftpoint = new paper.Point(topleftpoint.x, bottomrightpoint.y + 2 * radius);\n bottomrightpoint = new paper.Point(topleftpoint.x + channelWidth, topleftpoint.y + 2 * valvespacing + channelWidth);\n channel = new paper.Path.Rectangle(topleftpoint, bottomrightpoint);\n\n transposer_flow.addChild(channel);\n\n this.__createTransposerValve(transposer_flow, topleftpoint.x + channelWidth / 2, bottomrightpoint.y + radius, valveGap, radius, \"V\", channelWidth);\n\n // 3\n topleftpoint = new paper.Point(topleftpoint.x, bottomrightpoint.y + 2 * radius);\n bottomrightpoint = new paper.Point(topleftpoint.x + channelWidth, topleftpoint.y + valvespacing);\n channel = new paper.Path.Rectangle(topleftpoint, bottomrightpoint);\n\n transposer_flow.addChild(channel);\n\n // Bottom Channels\n topleftpoint = new paper.Point(px, py + 1.5 * channelWidth + 4 * valvespacing + 2 * 2 * radius);\n bottomrightpoint = new paper.Point(topleftpoint.x + 2 * valvespacing + channelWidth, topleftpoint.y + channelWidth);\n channel = new paper.Path.Rectangle(topleftpoint, bottomrightpoint);\n\n transposer_flow.addChild(channel);\n\n this.__createTransposerValve(transposer_flow, bottomrightpoint.x + radius, topleftpoint.y + channelWidth / 2, valveGap, radius, \"H\", channelWidth);\n\n // 2\n topleftpoint = new paper.Point(bottomrightpoint.x + 2 * radius, topleftpoint.y);\n bottomrightpoint = new paper.Point(topleftpoint.x + 4 * valvespacing + 2 * channelWidth + 2 * radius, topleftpoint.y + channelWidth);\n channel = new paper.Path.Rectangle(topleftpoint, bottomrightpoint);\n\n transposer_flow.addChild(channel);\n\n // Draw the right channels\n topleftpoint = new paper.Point(px + 5 * valvespacing + 2 * channelWidth + 4 * radius, py + channelWidth / 2);\n bottomrightpoint = new paper.Point(topleftpoint.x + channelWidth, topleftpoint.y + valvespacing);\n channel = new paper.Path.Rectangle(topleftpoint, bottomrightpoint);\n\n transposer_flow.addChild(channel);\n\n this.__createTransposerValve(transposer_flow, topleftpoint.x + channelWidth / 2, bottomrightpoint.y + radius, valveGap, radius, \"V\", channelWidth);\n\n // 2\n topleftpoint = new paper.Point(topleftpoint.x, bottomrightpoint.y + 2 * radius);\n bottomrightpoint = new paper.Point(topleftpoint.x + channelWidth, topleftpoint.y + valvespacing + channelWidth);\n channel = new paper.Path.Rectangle(topleftpoint, bottomrightpoint);\n\n transposer_flow.addChild(channel);\n\n transposer_flow.fillColor = color;\n\n // Draw the left channels\n topleftpoint = new paper.Point(px + valvespacing, py + 1.5 * channelWidth + 2 * valvespacing + 2 * radius);\n bottomrightpoint = new paper.Point(topleftpoint.x + channelWidth, topleftpoint.y + valvespacing);\n channel = new paper.Path.Rectangle(topleftpoint, bottomrightpoint);\n\n transposer_flow.addChild(channel);\n\n this.__createTransposerValve(transposer_flow, topleftpoint.x + channelWidth / 2, bottomrightpoint.y + radius, valveGap, radius, \"V\", channelWidth);\n\n // 2\n topleftpoint = new paper.Point(topleftpoint.x, bottomrightpoint.y + 2 * radius);\n bottomrightpoint = new paper.Point(topleftpoint.x + channelWidth, topleftpoint.y + valvespacing + channelWidth);\n channel = new paper.Path.Rectangle(topleftpoint, bottomrightpoint);\n\n transposer_flow.addChild(channel);\n\n transposer_flow.fillColor = color;\n\n transposer_flow.rotate(rotation, new paper.Point(px + 3 * valvespacing + 1.5 * channelWidth + 2 * radius, py + channelWidth + 2 * valvespacing + 2 * radius));\n\n return transposer_flow;\n }\n\n __createTransposerValve(compound_path: paper.CompoundPath, xpos: number, ypos: number, valveGap: number, radius: number, orientation: string, channel_width: number): void {\n const center = new paper.Point(xpos, ypos);\n\n // Create the basic circle\n let circ: paper.Path.Circle | paper.PathItem = new paper.Path.Circle(center, radius);\n\n // Add the tiny channel pieces that jut out\n let rec = new paper.Path.Rectangle({\n point: new paper.Point(xpos - channel_width / 2, ypos - radius),\n size: [channel_width, radius],\n stokeWidth: 0\n });\n\n circ = circ.unite(rec);\n\n rec = new paper.Path.Rectangle({\n point: new paper.Point(xpos - channel_width / 2, ypos),\n size: [channel_width, radius],\n stokeWidth: 0\n });\n\n circ = circ.unite(rec);\n\n const cutout = new paper.Path.Rectangle({\n from: new paper.Point(xpos - radius, ypos - valveGap / 2),\n to: new paper.Point(xpos + radius, ypos + valveGap / 2)\n });\n\n // cutout.fillColor = \"white\";\n const valve = circ.subtract(cutout);\n\n // TODO Rotate\n if (orientation === \"H\") {\n valve.rotate(90, center);\n }\n\n compound_path.addChild(valve);\n }\n\n __drawControl(params: { [k: string]: any }) {\n const position = params.position;\n const valveGap = params.valveGap;\n const radius = params.valveRadius;\n const color = params.color;\n const rotation = params.rotation;\n const channelWidth = params.controlChannelWidth;\n const valvespacing = params.valveSpacing;\n const transposer_control = new paper.CompoundPath(\"\");\n\n const px = position[0];\n const py = position[1];\n\n // Top right valve\n let center = new paper.Point(px + 4 * valvespacing + 2 * channelWidth + 2 * radius + radius, py);\n let circle = new paper.Path.Circle(center, radius);\n transposer_control.addChild(circle);\n\n let topLeft = new paper.Point(px + 4 * valvespacing + 2 * channelWidth + 2 * radius + radius - channelWidth / 2, py - 2 * radius);\n let bottomRight = new paper.Point(px + 4 * valvespacing + 2 * channelWidth + 2 * radius + radius + channelWidth / 2, py);\n transposer_control.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n topLeft = new paper.Point(px - 2 * radius, py - 2 * radius - channelWidth / 2);\n bottomRight = new paper.Point(px + 4 * valvespacing + 2 * channelWidth + 2 * radius + radius + channelWidth / 2, py - 2 * radius + channelWidth / 2);\n transposer_control.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n // 2nd row valves\n\n center = new paper.Point(px + 1.5 * channelWidth + 3 * valvespacing + 2 * radius, py + channelWidth / 2 + valvespacing + radius);\n circle = new paper.Path.Circle(center, radius);\n transposer_control.addChild(circle);\n\n let crosschannelstart = center;\n\n center = new paper.Point(center.x + 2 * valvespacing + 2 * radius + channelWidth, py + channelWidth / 2 + valvespacing + radius);\n circle = new paper.Path.Circle(center, radius);\n transposer_control.addChild(circle);\n\n let crosschannelend = center;\n\n // Draw the cross channel connecting the 2nd row valves\n let rect = new paper.Path.Rectangle({\n from: new paper.Point(crosschannelstart.x, crosschannelstart.y - channelWidth / 2),\n to: new paper.Point(crosschannelend.x, crosschannelstart.y + channelWidth / 2)\n });\n\n transposer_control.addChild(rect);\n\n topLeft = new paper.Point(crosschannelend.x, crosschannelstart.y - channelWidth / 2);\n bottomRight = new paper.Point(crosschannelend.x + 2 * radius, crosschannelstart.y + channelWidth / 2);\n transposer_control.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n topLeft = new paper.Point(crosschannelend.x + 2 * radius - channelWidth / 2, crosschannelstart.y - channelWidth / 2);\n bottomRight = new paper.Point(crosschannelend.x + 2 * radius + channelWidth / 2, py + 1.5 * channelWidth + 3 * valvespacing + 2 * radius + radius);\n transposer_control.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n // 3rd Row valves\n\n center = new paper.Point(px + 0.5 * channelWidth + valvespacing, py + 1.5 * channelWidth + 3 * valvespacing + 2 * radius + radius);\n circle = new paper.Path.Circle(center, radius);\n transposer_control.addChild(circle);\n\n crosschannelstart = center;\n\n center = new paper.Point(center.x + 2 * valvespacing + 2 * radius + channelWidth, center.y);\n circle = new paper.Path.Circle(center, radius);\n transposer_control.addChild(circle);\n\n crosschannelend = center;\n\n // Draw the cross channel connecting the 3nd row valves\n rect = new paper.Path.Rectangle({\n from: new paper.Point(crosschannelstart.x, crosschannelstart.y - channelWidth / 2),\n to: new paper.Point(crosschannelend.x, crosschannelstart.y + channelWidth / 2)\n });\n\n transposer_control.addChild(rect);\n\n topLeft = new paper.Point(crosschannelend.x, crosschannelstart.y - channelWidth / 2);\n bottomRight = new paper.Point(center.x + 2 * valvespacing + 4 * radius + channelWidth + channelWidth / 2, crosschannelstart.y + channelWidth / 2);\n transposer_control.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n // Bottom Row valve\n center = new paper.Point(px + channelWidth + 2 * valvespacing + radius, py + 4 * valvespacing + 4 * radius + 2 * channelWidth);\n circle = new paper.Path.Circle(center, radius);\n transposer_control.addChild(circle);\n\n topLeft = new paper.Point(px - 2 * radius - channelWidth / 2, py - 2 * radius - channelWidth / 2);\n bottomRight = new paper.Point(px - 2 * radius + channelWidth / 2, py + 4 * valvespacing + 6 * radius + 2 * channelWidth);\n transposer_control.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n topLeft = new paper.Point(px - 2 * radius - channelWidth / 2, py + 4 * valvespacing + 6 * radius + 2 * channelWidth - channelWidth / 2);\n bottomRight = new paper.Point(px + channelWidth + 2 * valvespacing + radius, py + 4 * valvespacing + 6 * radius + 2 * channelWidth + channelWidth / 2);\n transposer_control.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n topLeft = new paper.Point(px + channelWidth + 2 * valvespacing + radius - channelWidth / 2, py + 4 * valvespacing + 4 * radius + 2 * channelWidth);\n bottomRight = new paper.Point(px + channelWidth + 2 * valvespacing + radius + channelWidth / 2, py + 4 * valvespacing + 6 * radius + 2 * channelWidth + channelWidth / 2);\n transposer_control.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n // Finally we draw the cross channel\n const topleftpoint = new paper.Point(px + valvespacing, py + channelWidth / 2 + 2 * radius + 2 * valvespacing);\n const bottomleftpoint = new paper.Point(topleftpoint.x + +4 * valvespacing + 3 * channelWidth + 4 * radius, topleftpoint.y + channelWidth);\n const rectangle = new paper.Path.Rectangle(topleftpoint, bottomleftpoint);\n transposer_control.addChild(rectangle);\n\n transposer_control.rotate(rotation, new paper.Point(px + 3 * valvespacing + 1.5 * channelWidth + 2 * radius, py + channelWidth + 2 * valvespacing + 2 * radius));\n\n transposer_control.fillColor = color;\n return transposer_control;\n }\n}\n","import { extend } from \"vue/types/umd\";\nimport Template from \"./template\";\nimport { ValveType } from \"../core/init\";\n\nexport default class ValveTemplate extends Template{\n protected _valveType: ValveType = ValveType.NORMALLY_OPEN;\n constructor(valveType: ValveType) {\n super();\n this._valveType = valveType;\n }\n\n get valveType(): ValveType {\n return this._valveType;\n }\n \n}","import Template from \"./template\";\nimport paper from \"paper\";\nimport ComponentPort from \"../core/componentPort\";\nimport { LogicalLayerType, ValveType } from \"../core/init\";\nimport ValveTemplate from \"./valveTemplate\";\n\nexport default class Valve extends ValveTemplate {\n constructor(valveType: ValveType) {\n super(valveType);\n }\n\n __setupDefinitions(): void {\n this.__unique = {\n position: \"Point\"\n };\n\n this.__heritable = {\n componentSpacing: \"Float\",\n rotation: \"Float\",\n length: \"Float\",\n width: \"Float\",\n height: \"Float\"\n };\n\n this.__defaults = {\n componentSpacing: 1000,\n rotation: 0,\n width: 1.23 * 1000,\n length: 4.92 * 1000,\n height: 250\n };\n\n this.__units = {\n componentSpacing: \"μm\",\n rotation: \"°\",\n length: \"μm\",\n width: \"μm\",\n height: \"μm\"\n };\n\n this.__minimum = {\n componentSpacing: 0,\n rotation: 0,\n width: 30,\n length: 120,\n height: 10\n };\n\n this.__maximum = {\n componentSpacing: 10000,\n rotation: 180,\n width: 6000,\n length: 24 * 1000,\n height: 1200\n };\n\n this.__featureParams = {\n componentSpacing: \"componentSpacing\",\n position: \"position\",\n length: \"length\",\n width: \"width\",\n rotation: \"rotation\"\n };\n\n this.__targetParams = {\n componentSpacing: \"componentSpacing\",\n length: \"length\",\n width: \"width\",\n rotation: \"rotation\"\n };\n\n this.__placementTool = \"valveInsertionTool\";\n\n this.__toolParams = {\n position: \"position\"\n };\n\n this.__renderKeys = [\"CONTROL\"];\n\n this.__mint = \"VALVE\";\n\n this.__zOffsetKeys = {\n CONTROL: \"height\"\n };\n\n this.__substrateOffset = {\n CONTROL: \"+1\"\n };\n }\n\n getPorts(params: { [k: string]: any }) {\n const l = params.length;\n const w = params.width;\n\n const ports = [];\n\n ports.push(new ComponentPort(0, 0, \"1\", LogicalLayerType.CONTROL));\n\n return ports;\n }\n\n render2D(params: { [k: string]: any }, key = \"CONTROL\") {\n const position = params.position;\n const px = position[0];\n const py = position[1];\n const l = params.length;\n const w = params.width;\n const color = params.color;\n const rotation = params.rotation;\n const startX = px - w / 2;\n const startY = py - l / 2;\n const endX = px + w / 2;\n const endY = py + l / 2;\n const startPoint = new paper.Point(startX, startY);\n const endPoint = new paper.Point(endX, endY);\n const rec = new paper.Path.Rectangle({\n from: startPoint,\n to: endPoint,\n radius: 0,\n fillColor: color,\n strokeWidth: 0\n });\n rec.rotate(rotation, new paper.Point(px, py));\n let compoundPath = new paper.CompoundPath(rec);\n compoundPath.fillColor = color;\n return (compoundPath);\n }\n\n render2DTarget(key: string | null, params: { [k: string]: any }) {\n const render = this.render2D(params, \"CONTROL\");\n render.fillColor = params.color;\n render.fillColor!.alpha = 0.5;\n return render;\n }\n}\n","import Template from \"./template\";\nimport paper from \"paper\";\nimport ComponentPort from \"../core/componentPort\";\nimport { LogicalLayerType, ValveType } from \"../core/init\";\nimport ValveTemplate from \"./valveTemplate\";\n\nexport default class Valve3D extends ValveTemplate {\n constructor(valveType: ValveType) {\n super(valveType);\n }\n\n __setupDefinitions(): void {\n this.__unique = {\n position: \"Point\"\n };\n\n this.__heritable = {\n componentSpacing: \"Float\",\n rotation: \"Float\",\n valveRadius: \"Float\",\n height: \"Float\",\n gap: \"Float\",\n width: \"Float\",\n length: \"Float\"\n };\n\n this.__defaults = {\n componentSpacing: 1000,\n rotation: 0,\n valveRadius: 1.2 * 1000,\n height: 250,\n gap: 0.6 * 1000,\n width: 2.4 * 1000,\n length: 2.4 * 1000\n };\n\n this.__units = {\n componentSpacing: \"μm\",\n valveRadius: \"μm\",\n height: \"μm\",\n gap: \"μm\",\n width: \"μm\",\n length: \"μm\",\n rotation: \"°\"\n };\n\n this.__minimum = {\n componentSpacing: 0,\n valveRadius: 0.1 * 100,\n height: 0.1 * 100,\n gap: 0.5 * 10,\n rotation: 0,\n width: 10,\n length: 10\n\n };\n\n this.__maximum = {\n componentSpacing: 10000,\n valveRadius: 0.3 * 10000,\n height: 1.2 * 1000,\n gap: 0.1 * 10000,\n rotation: 180,\n width: 3 * 1000,\n length: 3 * 1000\n };\n\n this.__featureParams = {\n componentSpacing: \"componentSpacing\",\n position: \"position\",\n rotation: \"rotation\",\n radius1: \"valveRadius\",\n radius2: \"valveRadius\",\n valveRadius: \"valveRadius\",\n gap: \"gap\"\n };\n\n this.__targetParams = {\n componentSpacing: \"componentSpacing\",\n position: \"position\",\n rotation: \"rotation\",\n radius1: \"valveRadius\",\n radius2: \"valveRadius\",\n valveRadius: \"valveRadius\",\n gap: \"gap\"\n };\n\n this.__placementTool = \"valveInsertionTool\";\n\n this.__toolParams = {\n position: \"position\"\n };\n\n this.__renderKeys = [\"FLOW\", \"CONTROL\", \"INVERSE\"];\n\n this.__mint = \"VALVE3D\";\n\n this.__zOffsetKeys = {\n FLOW: \"height\",\n CONTROL: \"height\",\n INVERSE: \"height\"\n };\n\n this.__substrateOffset = {\n FLOW: \"0\",\n CONTROL: \"+1\",\n INVERSE: \"0\"\n };\n\n this.__childFeatureMacros = [\n \"VALVE3D GAP\",\n \"VALVE3D FLOW\",\n ];\n }\n\n getPorts(params: { [k: string]: any }) {\n const ports = [];\n\n ports.push(new ComponentPort(0, 0, \"1\", LogicalLayerType.CONTROL));\n\n return ports;\n }\n\n __drawFlow(params: { [k: string]: any }) {\n const position = params.position;\n const gap = params.gap;\n const radius = params.valveRadius;\n const color = params.color;\n const rotation = params.rotation;\n\n const center = new paper.Point(position[0], position[1]);\n // let h0p0, h0p1, h0p2, h1p0, h1p1, h1p2;\n const circ = new paper.Path.Circle(center, radius);\n // circ.fillColor = color;\n // if (String(color) === \"3F51B5\") {\n const cutout = new paper.Path.Rectangle({\n from: new paper.Point(position[0] - radius, position[1] - gap / 2),\n to: new paper.Point(position[0] + radius, position[1] + gap / 2)\n });\n // cutout.fillColor = \"white\";\n const valve = circ.subtract(cutout);\n valve.rotate(rotation, center);\n valve.fillColor = color;\n return valve;\n }\n\n __drawControl(params: { [k: string]: any }) {\n const position = params.position;\n const gap = params.gap;\n const radius = params.valveRadius;\n const color = params.color;\n const rotation = params.rotation;\n const center = new paper.Point(position[0], position[1]);\n // let h0p0, h0p1, h0p2, h1p0, h1p1, h1p2;\n const circ = new paper.Path.Circle(center, radius);\n circ.fillColor = color;\n return circ;\n }\n\n render2D(params: { [k: string]: any }, key = \"FLOW\") {\n if (key === \"FLOW\") {\n return this.__drawFlow(params);\n } else if (key === \"CONTROL\") {\n return this.__drawControl(params);\n } else if (key === \"INVERSE\") {\n return this.__drawInverseFlow(params);\n } else {\n throw new Error(\"No render procedure defined for component:\" + this.__mint + \", key: \" + key);\n }\n }\n\n render2DTarget(key: string | null, params: { [k: string]: any }) {\n const render = this.render2D(params, \"FLOW\");\n render.fillColor!.alpha = 0.5;\n return render;\n }\n\n __drawInverseFlow(params: { [k: string]: any }): paper.PathItem {\n const position = params.position;\n const gap = params.gap;\n const radius = params.valveRadius;\n const color = params.color;\n console.log(\"Color:\", color);\n const rotation = params.rotation;\n const center = new paper.Point(position[0], position[1]);\n // let h0p0, h0p1, h0p2, h1p0, h1p1, h1p2;\n const circ = new paper.Path.Circle(center, radius);\n circ.fillColor = color;\n return (circ.rotate(rotation, center) as unknown) as paper.Path.Circle;\n }\n}\n","import Template from \"./template\";\nimport paper from \"paper\";\nimport ComponentPort from \"../core/componentPort\";\nimport { LogicalLayerType } from \"../core/init\";\n\nexport default class Tree extends Template {\n constructor() {\n super();\n }\n\n __setupDefinitions(): void {\n this.__unique = {\n position: \"Point\"\n };\n\n this.__heritable = {\n componentSpacing: \"Float\",\n flowChannelWidth: \"Float\",\n rotation: \"Float\",\n spacing: \"Float\",\n in: \"Integer\",\n out: \"Integer\",\n width: \"Float\",\n height: \"Float\",\n stageLength: \"Float\"\n };\n\n this.__defaults = {\n componentSpacing: 1000,\n flowChannelWidth: 0.8 * 1000,\n rotation: 0,\n spacing: 4 * 1000,\n in: 1,\n out: 8,\n width: 2.46 * 1000,\n height: 250,\n stageLength: 4000\n };\n\n this.__units = {\n componentSpacing: \"μm\",\n flowChannelWidth: \"μm\",\n rotation: \"°\",\n spacing: \"μm\",\n in: \"\",\n out: \"\",\n width: \"μm\",\n height: \"μm\",\n stageLength: \"μm\"\n };\n\n this.__minimum = {\n componentSpacing: 0,\n flowChannelWidth: 10,\n spacing: 30,\n in: 1,\n out: 2,\n width: 60,\n height: 10,\n stageLength: 100,\n rotation: 0\n };\n\n this.__maximum = {\n componentSpacing: 10000,\n flowChannelWidth: 2000,\n spacing: 12000,\n in: 1,\n out: 128,\n width: 12 * 1000,\n height: 1200,\n stageLength: 6000,\n rotation: 360\n };\n\n this.__featureParams = {\n componentSpacing: \"componentSpacing\",\n position: \"position\",\n flowChannelWidth: \"flowChannelWidth\",\n rotation: \"rotation\",\n spacing: \"spacing\",\n width: \"width\",\n in: \"in\",\n out: \"out\",\n stageLength: \"stageLength\"\n };\n\n this.__targetParams = {\n componentSpacing: \"componentSpacing\",\n flowChannelWidth: \"flowChannelWidth\",\n rotation: \"rotation\",\n spacing: \"spacing\",\n width: \"width\",\n in: \"in\",\n out: \"out\",\n stageLength: \"stageLength\"\n };\n\n this.__placementTool = \"componentPositionTool\";\n\n this.__toolParams = {\n position: \"position\"\n };\n\n this.__renderKeys = [\"FLOW\"];\n\n this.__mint = \"TREE\";\n\n this.__zOffsetKeys = {\n FLOW: \"height\"\n };\n\n this.__substrateOffset = {\n FLOW: \"0\"\n };\n }\n\n getPorts(params: { [k: string]: any }) {\n const ports = [];\n const cw = params.flowChannelWidth;\n const spacing = params.spacing;\n const ins = params.in;\n const outs = params.out;\n let leafs;\n if (ins < outs) {\n leafs = outs;\n } else {\n leafs = ins;\n }\n const stagelength = params.stageLength;\n\n const levels = Math.ceil(Math.log2(leafs));\n const w = spacing * (leafs / 2 + 1);\n\n const length = levels * (cw + stagelength) + stagelength;\n const width = 2 * 0.5 * w * 2 * Math.pow(0.5, levels);\n\n ports.push(new ComponentPort(0, 0, \"1\", LogicalLayerType.FLOW));\n\n for (let i = 0; i < leafs; i++) {\n ports.push(new ComponentPort(((leafs - 1) * width) / 2 - i * width, length, (2 + i).toString(), LogicalLayerType.FLOW));\n }\n\n return ports;\n }\n\n render2D(params: { [k: string]: any }, key: string): paper.CompoundPath {\n const position = params.position;\n const cw = params.flowChannelWidth;\n const rotation = params.rotation;\n const spacing = params.spacing;\n const ins = params.in;\n const outs = params.out;\n let leafs;\n if (ins < outs) {\n leafs = outs;\n } else {\n leafs = ins;\n }\n const color = params.color;\n const stagelength = params.stageLength;\n const px = position[0];\n const py = position[1];\n\n const levels = Math.ceil(Math.log2(leafs));\n let isodd = false; // This is used to figure out how many lines have to be made\n if (leafs % 2 === 0) {\n isodd = false;\n } else {\n isodd = true;\n }\n const w = spacing * (leafs / 2 + 1);\n const l = (levels + 1) * stagelength;\n\n // console.log(\"CW: \" + cw + \" levels: \"+ levels + \" width: \" + w + \" length: \" + l)\n\n const treepath = new paper.CompoundPath(\"\");\n\n this.__generateTwig(treepath, px, py, cw, stagelength, w, 1, levels);\n\n // Draw the tree\n\n treepath.fillColor = color;\n return (treepath.rotate(rotation, new paper.Point(px, py)) as unknown) as paper.CompoundPath;\n }\n\n __generateTwig(treepath: paper.CompoundPath, px: number, py: number, cw: number, stagelength: number, newspacing: number, level: number, maxlevel: number, islast = false): void {\n // var newspacing = 2 * (spacing + cw);\n const hspacing = newspacing / 2;\n const lex = px - 0.5 * newspacing;\n const ley = py + cw + stagelength;\n const rex = px + 0.5 * newspacing;\n const rey = py + cw + stagelength;\n\n if (level === maxlevel) {\n islast = true;\n // console.log(\"Final Spacing: \" + newspacing)\n }\n\n this.__drawtwig(treepath, px, py, cw, stagelength, newspacing, islast);\n // drawtwig(treepath, lex, ley, cw, stagelength, hspacing, islast);\n // drawtwig(treepath, rex, rey, cw, stagelength, hspacing, islast);\n\n if (!islast) {\n this.__generateTwig(treepath, lex, ley, cw, stagelength, hspacing, level + 1, maxlevel);\n this.__generateTwig(treepath, rex, rey, cw, stagelength, hspacing, level + 1, maxlevel);\n }\n }\n\n __drawtwig(treepath: paper.CompoundPath, px: number, py: number, cw: number, stagelength: number, spacing: number, drawleafs = false): paper.CompoundPath {\n // stem\n let startPoint = new paper.Point(px - cw / 2, py);\n let endPoint = new paper.Point(px + cw / 2, py + stagelength);\n let rec = new paper.Path.Rectangle({\n from: startPoint,\n to: endPoint,\n radius: 0,\n strokeWidth: 0\n });\n\n treepath.addChild(rec);\n\n // Draw 2 leafs\n // left leaf\n const lstartx = px - 0.5 * (cw + spacing);\n const lendx = lstartx + cw;\n const lstarty = py + stagelength + cw;\n const lendy = lstarty + stagelength;\n\n // //right leaf\n const rstartx = px + 0.5 * (spacing - cw);\n const rendx = rstartx + cw;\n const rstarty = py + stagelength + cw;\n const rendy = rstarty + stagelength;\n\n if (drawleafs) {\n startPoint = new paper.Point(lstartx, lstarty);\n endPoint = new paper.Point(lendx, lendy);\n rec = new paper.Path.Rectangle({\n from: startPoint,\n to: endPoint,\n radius: 0,\n strokeWidth: 0\n });\n treepath.addChild(rec);\n\n startPoint = new paper.Point(rstartx, rstarty);\n endPoint = new paper.Point(rendx, rendy);\n rec = new paper.Path.Rectangle({\n from: startPoint,\n to: endPoint,\n radius: 0,\n strokeWidth: 0\n });\n treepath.addChild(rec);\n }\n\n // Horizontal bar\n const hstartx = px - 0.5 * (cw + spacing);\n const hendx = rendx;\n const hstarty = py + stagelength;\n const hendy = hstarty + cw;\n startPoint = new paper.Point(hstartx, hstarty);\n endPoint = new paper.Point(hendx, hendy);\n rec = new paper.Path.Rectangle({\n from: startPoint,\n to: endPoint,\n radius: 0,\n strokeWidth: 0\n });\n treepath.addChild(rec);\n return treepath;\n }\n\n render2DTarget(key: string | null, params: { [k: string]: any }): paper.CompoundPath {\n if (key === null) {\n key = this.__renderKeys[0];\n }\n const render = this.render2D(params, key);\n render.fillColor!.alpha = 0.5;\n return render;\n }\n}\n","import Template from \"./template\";\nimport paper from \"paper\";\nimport ComponentPort from \"../core/componentPort\";\nimport { LogicalLayerType } from \"../core/init\";\nimport { CompoundPath } from \"paper/dist/paper-core\";\n\nexport default class YTree extends Template {\n constructor() {\n super();\n }\n\n __setupDefinitions(): void {\n this.__unique = {\n position: \"Point\"\n };\n\n this.__heritable = {\n componentSpacing: \"Float\",\n flowChannelWidth: \"Float\",\n rotation: \"Float\",\n spacing: \"Float\",\n in: \"Integer\",\n out: \"Integer\",\n width: \"Float\",\n height: \"Float\",\n stageLength: \"Float\"\n };\n\n this.__defaults = {\n componentSpacing: 1000,\n flowChannelWidth: 0.8 * 1000,\n rotation: 0,\n spacing: 4 * 1000,\n in: 1,\n out: 8,\n width: 2.46 * 1000,\n height: 250,\n stageLength: 4000\n };\n\n this.__units = {\n componentSpacing: \"μm\",\n flowChannelWidth: \"μm\",\n rotation: \"°\",\n spacing: \"μm\",\n in: \"\",\n out: \"\",\n width: \"μm\",\n height: \"μm\",\n stageLength: \"μm\"\n };\n\n this.__minimum = {\n componentSpacing: 0,\n flowChannelWidth: 10,\n spacing: 30,\n in: 1,\n out: 2,\n width: 60,\n height: 10,\n stageLength: 100,\n rotation: 0\n };\n\n this.__maximum = {\n componentSpacing: 10000,\n flowChannelWidth: 2000,\n spacing: 12000,\n in: 1,\n out: 128,\n width: 12 * 1000,\n height: 1200,\n stageLength: 6000,\n rotation: 360\n };\n\n this.__featureParams = {\n componentSpacing: \"componentSpacing\",\n position: \"position\",\n flowChannelWidth: \"flowChannelWidth\",\n rotation: \"rotation\",\n spacing: \"spacing\",\n width: \"width\",\n in: \"in\",\n out: \"out\",\n stageLength: \"stageLength\"\n };\n\n this.__targetParams = {\n componentSpacing: \"componentSpacing\",\n flowChannelWidth: \"flowChannelWidth\",\n rotation: \"rotation\",\n spacing: \"spacing\",\n in: \"in\",\n out: \"out\",\n stageLength: \"stageLength\"\n };\n\n this.__placementTool = \"componentPositionTool\";\n\n this.__toolParams = {\n position: \"position\"\n };\n\n this.__renderKeys = [\"FLOW\"];\n\n this.__mint = \"YTREE\";\n\n this.__zOffsetKeys = {\n FLOW: \"height\"\n };\n\n this.__substrateOffset = {\n FLOW: \"0\"\n };\n }\n\n getPorts(params: { [k: string]: any }) {\n const ports = [];\n const cw = params.flowChannelWidth;\n const spacing = params.spacing;\n const ins = params.in;\n const outs = params.out;\n let rotation = params.rotation;\n let leafs;\n if (ins < outs) {\n leafs = outs;\n } else {\n leafs = ins;\n rotation += 180;\n }\n const stagelength = params.stageLength;\n\n const levels = Math.ceil(Math.log2(leafs));\n const w = spacing * (leafs / 2 + 1);\n\n const length = levels * stagelength;\n const width = 2 * 0.5 * w * 2 * Math.pow(0.5, levels);\n\n ports.push(new ComponentPort(0, -cw / 2, \"1\", LogicalLayerType.FLOW));\n\n for (let i = 0; i < leafs; i++) {\n ports.push(new ComponentPort(((leafs - 1) * width) / 2 - i * width, length + cw / 2, (2 + i).toString(), LogicalLayerType.FLOW));\n }\n\n return ports;\n }\n\n render2D(params: { [k: string]: any }, key: string) {\n const position = params.position;\n const cw = params.flowChannelWidth;\n let rotation = params.rotation;\n const spacing = params.spacing;\n const ins = params.in;\n const outs = params.out;\n let leafs;\n if (ins < outs) {\n leafs = outs;\n } else {\n leafs = ins;\n rotation += 180;\n }\n const color = params.color;\n const stagelength = params.stageLength;\n const px = position[0];\n const py = position[1];\n\n const levels = Math.ceil(Math.log2(leafs));\n let isodd = false; // This is used to figure out how many lines have to be made\n if (leafs % 2 === 0) {\n isodd = false;\n } else {\n isodd = true;\n }\n const w = spacing * (leafs / 2 + 1);\n const l = (levels + 1) * stagelength;\n\n const treepath = new paper.CompoundPath(\"\");\n\n this.__generateYTwig(treepath, px, py, cw, stagelength, w, 1, levels);\n\n // Draw the tree\n\n treepath.fillColor = color;\n treepath.rotate(rotation, new paper.Point(px, py));\n \n return treepath;\n }\n\n render2DTarget(key: string | null, params: { [k: string]: any }) {\n if (key === null) {\n key = this.__renderKeys[0];\n }\n const render = this.render2D(params, key);\n render.fillColor!.alpha = 0.5;\n return render;\n }\n\n __generateYTwig(treepath: paper.CompoundPath, px: number, py: number, cw: number, stagelength: number, newspacing: number, level: number, maxlevel: number, islast = false): void {\n const hspacing = newspacing / 2;\n const lex = px - 0.5 * newspacing;\n const ley = py + stagelength;\n const rex = px + 0.5 * newspacing;\n const rey = py + stagelength;\n\n if (level === maxlevel) {\n islast = true;\n }\n\n this.__drawYtwig(treepath, px, py, cw, stagelength, newspacing, islast);\n\n if (!islast) {\n this.__generateYTwig(treepath, lex, ley, cw, stagelength, hspacing, level + 1, maxlevel);\n this.__generateYTwig(treepath, rex, rey, cw, stagelength, hspacing, level + 1, maxlevel);\n }\n }\n\n __drawYtwig(treepath: paper.CompoundPath, px: number, py: number, cw: number, stagelength: number, spacing: number, drawleafs = false): paper.CompoundPath {\n const pivotpoint = new paper.Point(px, py);\n\n // stem\n const startPoint = new paper.Point(px - cw / 2, py - cw / 2);\n\n const angle = Math.atan(spacing / 2 / stagelength);\n\n const h = spacing / 2 / Math.sin(angle) + cw;\n\n // left leaf\n let rec = new paper.Path.Rectangle({\n size: [cw, h],\n point: startPoint,\n radius: cw / 2,\n stokeWidth: 0\n });\n rec.rotate((angle * 180) / Math.PI, pivotpoint);\n treepath.addChild(rec);\n\n // right leaf\n rec = new paper.Path.Rectangle({\n size: [cw, h],\n point: startPoint,\n radius: cw / 2,\n stokeWidth: 0\n });\n rec.rotate((-angle * 180) / Math.PI, pivotpoint);\n treepath.addChild(rec);\n\n return treepath;\n }\n}\n","import Template from \"./template\";\nimport paper from \"paper\";\nimport ComponentPort from \"../core/componentPort\";\nimport { LogicalLayerType } from \"../core/init\";\n\nexport default class LLChamber extends Template {\n constructor() {\n super();\n }\n\n __setupDefinitions(): void {\n this.__unique = {\n position: \"Point\"\n };\n\n this.__heritable = {\n componentSpacing: \"Float\",\n width: \"Float\",\n length: \"Float\",\n height: \"Float\",\n rotation: \"Float\",\n spacing: \"Float\",\n numberOfChambers: \"Integer\"\n };\n\n this.__defaults = {\n componentSpacing: 1000,\n width: 400,\n length: 5000,\n height: 250,\n spacing: 2000,\n numberOfChambers: 4,\n rotation: 0\n };\n\n this.__units = {\n componentSpacing: \"μm\",\n width: \"μm\",\n length: \"μm\",\n height: \"μm\",\n spacing: \"μm\",\n numberOfChambers: \"10\",\n rotation: \"°\"\n };\n\n this.__minimum = {\n componentSpacing: 0,\n width: 5,\n length: 5,\n height: 1,\n spacing: 1,\n numberOfChambers: 1,\n rotation: 0\n };\n\n this.__maximum = {\n componentSpacing: 10000,\n width: 50000,\n length: 50000,\n height: 50000,\n numberOfChambers: 1000,\n spacing: 50000,\n rotation: 360\n };\n\n this.__featureParams = {\n componentSpacing: \"componentSpacing\",\n position: \"position\",\n width: \"width\",\n length: \"length\",\n height: \"height\",\n numberOfChambers: \"numberOfChambers\",\n spacing: \"spacing\",\n rotation: \"rotation\"\n };\n\n this.__targetParams = {\n componentSpacing: \"componentSpacing\",\n position: \"position\",\n width: \"width\",\n length: \"length\",\n height: \"height\",\n numberOfChambers: \"numberOfChambers\",\n spacing: \"spacing\",\n rotation: \"rotation\"\n };\n\n this.__placementTool = \"multilayerPositionTool\";\n\n this.__toolParams = {\n position: \"position\"\n };\n\n this.__mint = \"LL CHAMBER\";\n\n this.__zOffsetKeys = {\n FLOW: \"height\",\n CONTROL: \"height\"\n };\n\n this.__substrateOffset = {\n FLOW: \"0\",\n CONTROL: \"+1\"\n };\n }\n\n getPorts(params: { [k: string]: any }) {\n const position = params.position;\n const px = position[0];\n const py = position[1];\n const l = params.length;\n const w = params.width;\n const rotation = params.rotation;\n const color = params.color;\n // let radius = params[\"cornerRadius\"];\n\n const numArray = params.numberOfChambers;\n const spacing = params.spacing;\n\n const ports = [];\n\n ports.push(new ComponentPort(w / 2, -w, \"1\", LogicalLayerType.FLOW));\n\n ports.push(new ComponentPort(numArray * w + (numArray + 1) * spacing - w / 2, -w, \"2\", LogicalLayerType.FLOW));\n\n ports.push(new ComponentPort(w / 2, l + w, \"3\", LogicalLayerType.FLOW));\n\n ports.push(new ComponentPort(numArray * w + (numArray + 1) * spacing - w / 2, l + w, \"4\", LogicalLayerType.FLOW));\n\n // //Control Ports - Left\n ports.push(new ComponentPort(0, 0.2 * l, \"10\", LogicalLayerType.CONTROL));\n\n ports.push(new ComponentPort(0, 0.5 * l, \"9\", LogicalLayerType.CONTROL));\n\n ports.push(new ComponentPort(0, 0.8 * l, \"8\", LogicalLayerType.CONTROL));\n\n // Control Ports - Right\n ports.push(new ComponentPort(numArray * w + (numArray + 1) * spacing, 0.2 * l, \"5\", LogicalLayerType.CONTROL));\n\n ports.push(new ComponentPort(numArray * w + (numArray + 1) * spacing, 0.5 * l, \"6\", LogicalLayerType.CONTROL));\n\n ports.push(new ComponentPort(numArray * w + (numArray + 1) * spacing, 0.8 * l, \"7\", LogicalLayerType.CONTROL));\n\n return ports;\n }\n\n __renderFlow(params: { [k: string]: any }) {\n const position = params.position;\n const px = position[0];\n const py = position[1];\n const l = params.length;\n const w = params.width;\n const rotation = params.rotation;\n const color = params.color;\n // let radius = params[\"cornerRadius\"];\n\n const numArray = params.numberOfChambers;\n const spacing = params.spacing;\n\n const rendered = new paper.CompoundPath(\"\");\n\n let rec;\n\n for (let i = 0; i < numArray; i++) {\n rec = new paper.Path.Rectangle({\n point: new paper.Point(px + (i + 1) * spacing + i * w, py - 1),\n size: [w, l + 2],\n radius: 0\n });\n\n rendered.addChild(rec);\n }\n\n const topchannel = new paper.Path.Rectangle({\n point: new paper.Point(px, py - w),\n size: [numArray * w + (numArray + 1) * spacing, w]\n });\n\n rendered.addChild(topchannel);\n\n const bottomchannel = new paper.Path.Rectangle({\n point: new paper.Point(px, py + l),\n size: [numArray * w + (numArray + 1) * spacing, w]\n });\n\n rendered.addChild(bottomchannel);\n\n rendered.fillColor = color;\n rendered.rotate(rotation, new paper.Point(px, py)); \n return rendered;\n }\n\n __renderControl(params: { [k: string]: any }) {\n const rendered = new paper.CompoundPath(\"\");\n const position = params.position;\n const px = position[0];\n const py = position[1];\n const l = params.length;\n const w = params.width;\n const rotation = params.rotation;\n const color = params.color;\n // let radius = params[\"cornerRadius\"];\n\n const numArray = params.numberOfChambers;\n const spacing = params.spacing;\n\n const topchannel = new paper.Path.Rectangle({\n point: new paper.Point(px, py + 0.2 * l - w / 2),\n size: [numArray * w + (numArray + 1) * spacing, w]\n });\n\n rendered.addChild(topchannel);\n\n const middlechannel = new paper.Path.Rectangle({\n point: new paper.Point(px, py + 0.5 * l - w / 2),\n size: [numArray * w + (numArray + 1) * spacing, w]\n });\n\n rendered.addChild(middlechannel);\n\n const bottomchannel = new paper.Path.Rectangle({\n point: new paper.Point(px, py + 0.8 * l - w / 2),\n size: [numArray * w + (numArray + 1) * spacing, w]\n });\n\n rendered.addChild(bottomchannel);\n\n rendered.fillColor = color;\n rendered.rotate(rotation, new paper.Point(px, py));\n return rendered;\n }\n\n render2D(params: { [k: string]: any }, key = \"FLOW\") {\n if (key === \"FLOW\") {\n return this.__renderFlow(params);\n } else if (key === \"CONTROL\") {\n return this.__renderControl(params);\n }\n throw new Error(\"Unknown render key found in LLCHAMBER: \" + key);\n }\n\n render2DTarget(key: string | null, params: { [k: string]: any }) {\n const ret = new paper.CompoundPath(\"\");\n const flow = this.render2D(params, \"FLOW\");\n const control = this.render2D(params, \"CONTROL\");\n ret.addChild(control);\n ret.addChild(flow);\n ret.fillColor = params.color;\n ret.fillColor!.alpha = 0.5;\n return ret;\n }\n}\n","import Template from \"./template\";\nimport paper from \"paper\";\nimport ComponentPort from \"../core/componentPort\";\nimport { LogicalLayerType } from \"../core/init\";\n\nexport default class ThreeDMixer extends Template {\n constructor() {\n super();\n }\n\n __setupDefinitions(): void {\n this.__unique = {\n position: \"Point\"\n };\n\n this.__heritable = {\n componentSpacing: \"Float\",\n bendSpacing: \"Float\",\n numberOfBends: \"Float\",\n channelWidth: \"Float\",\n bendLength: \"Float\",\n rotation: \"Float\",\n height: \"Float\"\n };\n\n this.__defaults = {\n componentSpacing: 1000,\n channelWidth: 0.8 * 1000,\n bendSpacing: 1.23 * 1000,\n numberOfBends: 1,\n rotation: 0,\n bendLength: 2.46 * 1000,\n height: 250\n };\n\n this.__units = {\n componentSpacing: \"μm\",\n bendSpacing: \"μm\",\n numberOfBends: \"\",\n channelWidth: \"μm\",\n bendLength: \"μm\",\n rotation: \"°\",\n height: \"μm\"\n };\n\n this.__minimum = {\n componentSpacing: 0,\n channelWidth: 10,\n bendSpacing: 10,\n numberOfBends: 1,\n rotation: 0,\n bendLength: 10,\n height: 10\n };\n\n this.__maximum = {\n componentSpacing: 10000,\n channelWidth: 2000,\n bendSpacing: 6000,\n numberOfBends: 20,\n rotation: 360,\n bendLength: 12 * 1000,\n height: 1200\n };\n\n this.__placementTool = \"multilayerPositionTool\";\n\n this.__toolParams = {\n cursorPosition: \"position\"\n };\n\n this.__featureParams = {\n componentSpacing: \"componentSpacing\",\n position: \"position\",\n channelWidth: \"channelWidth\",\n bendSpacing: \"bendSpacing\",\n numberOfBends: \"numberOfBends\",\n rotation: \"rotation\",\n bendLength: \"bendLength\"\n };\n\n this.__targetParams = {\n componentSpacing: \"componentSpacing\",\n channelWidth: \"channelWidth\",\n bendSpacing: \"bendSpacing\",\n numberOfBends: \"numberOfBends\",\n rotation: \"rotation\",\n bendLength: \"bendLength\"\n };\n\n this.__renderKeys = [\"FLOW\", \"CONTROL\"];\n\n this.__mint = \"MIXER3D\";\n\n this.__zOffsetKeys = {\n FLOW: \"height\",\n CONTROL: \"height\"\n };\n\n this.__substrateOffset = {\n FLOW: \"0\",\n CONTROL: \"+1\"\n };\n }\n\n getPorts(params: { [k: string]: any }) {\n const channelWidth = params.channelWidth;\n const bendLength = params.bendLength;\n const bendSpacing = params.bendSpacing;\n const rotation = params.rotation;\n const numberOfBends = params.numberOfBends;\n\n const ports = [];\n\n ports.push(new ComponentPort(bendLength / 2 + channelWidth, 0, \"1\", LogicalLayerType.FLOW));\n\n ports.push(new ComponentPort(bendLength / 2 + channelWidth, (2 * numberOfBends + 1) * channelWidth + 2 * numberOfBends * bendSpacing, \"2\", LogicalLayerType.FLOW));\n\n return ports;\n }\n\n render2D(params: { [k: string]: any }, key: string) {\n const channelWidth = params.channelWidth;\n const bendLength = params.bendLength;\n const bendSpacing = params.bendSpacing;\n const rotation = params.rotation;\n const numBends = params.numberOfBends;\n const x = params.position[0];\n const y = params.position[1];\n const color = params.color;\n const segHalf = bendLength / 2 + channelWidth;\n const segLength = bendLength + 2 * channelWidth;\n const segBend = bendSpacing + 2 * channelWidth;\n const vRepeat = 2 * bendSpacing + 2 * channelWidth;\n const vOffset = bendSpacing + channelWidth;\n const hOffset = bendLength / 2 + channelWidth / 2;\n const serp = new paper.CompoundPath(\"\");\n\n if (key === \"FLOW\") {\n // draw first segment\n serp.addChild(new paper.Path.Rectangle(new paper.Rectangle(x, y, segHalf + channelWidth / 2, channelWidth)));\n for (let i = 0; i < numBends; i++) {\n serp.addChild(new paper.Path.Rectangle(new paper.Rectangle(x, y + vRepeat * i, channelWidth, segBend)));\n // serp.addChild(new paper.Path.Rectangle(x, y + vOffset + vRepeat * i, segLength, channelWidth));\n serp.addChild(new paper.Path.Rectangle(new paper.Rectangle(x + channelWidth + bendLength, y + vOffset + vRepeat * i, channelWidth, segBend)));\n if (i === numBends - 1) {\n // draw half segment to close\n serp.addChild(new paper.Path.Rectangle(new paper.Rectangle(x + hOffset, y + vRepeat * (i + 1), segHalf, channelWidth)));\n } else {\n // draw full segment\n serp.addChild(new paper.Path.Rectangle(new paper.Rectangle(x, y + vRepeat * (i + 1), segLength, channelWidth)));\n }\n }\n } else {\n // draw first segment\n // serp.addChild(new paper.Path.Rectangle(x, y, segHalf + channelWidth / 2, channelWidth));\n for (let i = 0; i < numBends; i++) {\n // serp.addChild(new paper.Path.Rectangle(x, y + vRepeat * i, channelWidth, segBend));\n serp.addChild(new paper.Path.Rectangle(new paper.Rectangle(x, y + vOffset + vRepeat * i, segLength, channelWidth)));\n // serp.addChild(new paper.Path.Rectangle(x + channelWidth + bendLength, y + vOffset + vRepeat * i, channelWidth, segBend));\n // if (i === numBends - 1) {//draw half segment to close\n // serp.addChild(new paper.Path.Rectangle(x + hOffset, y + vRepeat * (i + 1), segHalf, channelWidth));\n // } else {//draw full segment\n // serp.addChild(new paper.Path.Rectangle(x, y + vRepeat * (i + 1), segLength, channelWidth));\n // }\n }\n }\n\n serp.fillColor = color;\n serp.rotate(rotation, new paper.Point(x, y));\n return serp;\n }\n\n render2DTarget(key: string | null, params: { [k: string]: any }) {\n if (key === null) {\n key = this.__renderKeys[0];\n }\n const serp = this.render2D(params, key);\n serp.fillColor = params.color;\n serp.fillColor!.alpha = 0.5;\n return serp;\n }\n}\n","import Template from \"./template\";\nimport paper from \"paper\";\nimport ComponentPort from \"../core/componentPort\";\nimport { LogicalLayerType } from \"../core/init\";\n\nexport default class Via extends Template {\n constructor() {\n super();\n }\n\n __setupDefinitions(): void {\n this.__unique = {\n position: \"Point\"\n };\n\n this.__heritable = {\n componentSpacing: \"Float\",\n radius: \"Float\",\n height: \"Float\"\n };\n\n this.__defaults = {\n componentSpacing: 1000,\n radius: 0.7 * 1000,\n height: 0\n };\n\n this.__units = {\n componentSpacing: \"μm\",\n radius: \"μm\",\n height: \"μm\"\n };\n\n this.__minimum = {\n componentSpacing: 0,\n radius: 0.8 * 10,\n height: 0\n };\n\n this.__maximum = {\n componentSpacing: 10000,\n radius: 2000,\n height: 0\n };\n\n this.__placementTool = \"componentPositionTool\";\n\n this.__toolParams = {\n position: \"position\"\n };\n\n this.__featureParams = {\n componentSpacing: \"componentSpacing\",\n position: \"position\",\n radius: \"radius\"\n };\n\n this.__targetParams = {\n componentSpacing: \"componentSpacing\",\n radius: \"radius\"\n };\n\n this.__renderKeys = [\"FLOW\"];\n\n this.__mint = \"VIA\";\n\n this.__zOffsetKeys = {\n FLOW: \"height\"\n };\n\n this.__substrateOffset = {\n FLOW: \"0\"\n };\n }\n\n getPorts(params: { [k: string]: any }) {\n const radius = params.radius;\n\n const ports = [];\n\n ports.push(new ComponentPort(0, 0, \"1\", LogicalLayerType.FLOW));\n\n return ports;\n }\n\n render2D(params: { [k: string]: any }, key: string) {\n // Regardless of the key...\n const position = params.position;\n const radius = params.radius;\n const color1 = params.color;\n const pos = new paper.Point(position[0], position[1]);\n const outerCircle = new paper.Path.Circle(pos, radius);\n outerCircle.fillColor = color1;\n return outerCircle;\n }\n\n render2DTarget(key: string | null, params: { [k: string]: any }) {\n if (key === null) {\n key = this.__renderKeys[0];\n }\n const render = this.render2D(params, key);\n render.fillColor!.alpha = 0.5;\n return render;\n }\n}\n","import Template from \"./template\";\nimport paper, { Path } from \"paper\";\nimport ComponentPort from \"../core/componentPort\";\nimport { LogicalLayerType } from \"../core/init\";\n\nexport default class Filter extends Template {\n constructor() {\n super();\n }\n\n __setupDefinitions(): void {\n this.__unique = {\n position: \"Point\"\n };\n\n this.__heritable = {\n componentSpacing: \"Float\",\n rotation: \"Float\",\n height: \"Float\",\n pillarDiameter: \"Float\",\n filterWidth: \"Float\",\n barrierWidth: \"Float\",\n filterLength: \"Float\",\n filterNumber: \"Float\",\n levelNumber: \"Float\",\n inletWidth: \"Float\",\n inletLength: \"Float\",\n outletWidth: \"Float\",\n outletLength: \"Float\"\n };\n\n this.__defaults = {\n componentSpacing: 1000,\n rotation: 0,\n height: 250,\n pillarDiameter: 2 * 1000,\n filterWidth: 1 * 1000,\n barrierWidth: 1 * 1000,\n filterLength: 3 * 1000,\n filterNumber: 5,\n levelNumber: 2,\n inletWidth: 1 * 1000,\n inletLength: 3 * 1000,\n outletWidth: 1 * 1000,\n outletLength: 3 * 1000\n };\n\n this.__units = {\n componentSpacing: \"μm\",\n rotation: \"°\",\n height: \"μm\",\n pillarDiameter: \"μm\",\n filterWidth: \"μm\",\n barrierWidth: \"μm\",\n filterLength: \"μm\",\n filterNumber: \"\",\n levelNumber: \"\",\n inletWidth: \"μm\",\n inletLength: \"μm\",\n outletWidth: \"μm\",\n outletLength: \"μm\"\n };\n\n this.__minimum = {\n componentSpacing: 0,\n rotation: 0,\n height: 10,\n pillarDiameter: 1 * 1000,\n filterWidth: 0.5 * 1000,\n barrierWidth: 0.5 * 1000,\n filterLength: 2 * 1000,\n filterNumber: 2,\n levelNumber: 1,\n inletWidth: 0.5 * 1000,\n inletLength: 1 * 1000,\n outletWidth: 0.5 * 1000,\n outletLength: 1 * 1000\n };\n\n this.__maximum = {\n componentSpacing: 10000,\n rotation: 360,\n height: 1200,\n pillarDiameter: 4 * 1000,\n filterWidth: 4 * 1000,\n barrierWidth: 6 * 1000,\n filterLength: 9 * 1000,\n filterNumber: 5,\n levelNumber: 10,\n inletWidth: 4 * 1000,\n inletLength: 8 * 1000,\n outletWidth: 4 * 1000,\n outletLength: 8 * 1000\n };\n\n this.__placementTool = \"componentPositionTool\";\n\n this.__toolParams = {\n cursorPosition: \"position\"\n };\n\n this.__featureParams = {\n componentSpacing: \"componentSpacing\",\n position: \"position\",\n rotation: \"rotation\",\n pillarDiameter: \"pillarDiameter\",\n filterWidth: \"filterWidth\",\n barrierWidth: \"barrierWidth\",\n filterLength: \"filterLength\",\n filterNumber: \"filterNumber\",\n levelNumber: \"levelNumber\",\n inletWidth: \"inletWidth\",\n inletLength: \"inletLength\",\n outletWidth: \"outletWidth\",\n outletLength: \"outletLength\"\n };\n\n this.__targetParams = {\n componentSpacing: \"componentSpacing\",\n rotation: \"rotation\",\n pillarDiameter: \"pillarDiameter\",\n filterWidth: \"filterWidth\",\n barrierWidth: \"barrierWidth\",\n filterLength: \"filterLength\",\n filterNumber: \"filterNumber\",\n levelNumber: \"levelNumber\",\n inletWidth: \"inletWidth\",\n inletLength: \"inletLength\",\n outletWidth: \"outletWidth\",\n outletLength: \"outletLength\"\n };\n\n this.__renderKeys = [\"FLOW\"];\n\n this.__mint = \"FILTER\";\n\n this.__zOffsetKeys = {\n FLOW: \"height\"\n };\n\n this.__substrateOffset = {\n FLOW: \"0\"\n };\n }\n\n getPorts(params: { [k: string]: any }) {\n const inletLength = params.inletLength;\n const filterLength = params.filterLength;\n const outletLength = params.outletLength;\n const levelNumber = params.levelNumber;\n const pillarDiameter = params.pillarDiameter;\n\n const ports = [];\n\n ports.push(new ComponentPort(0, 0, \"1\", LogicalLayerType.FLOW));\n\n ports.push(new ComponentPort(inletLength + 5 * pillarDiameter + 1.3 * levelNumber * filterLength + outletLength, 0, \"2\", LogicalLayerType.FLOW));\n\n return ports;\n }\n\n render2D(params: { [k: string]: any }, key: string) {\n const rotation = params.rotation;\n const x = params.position[0];\n const y = params.position[1];\n const color = params.color;\n const pillarDiameter = params.pillarDiameter;\n const filterWidth = params.filterWidth;\n const barrierWidth = params.barrierWidth;\n const filterLength = params.filterLength;\n const filterNumber = params.filterNumber;\n const levelNumber = params.levelNumber;\n const inletWidth = params.inletWidth;\n const inletLength = params.inletLength;\n const outletWidth = params.outletWidth;\n const outletLength = params.outletLength;\n\n const serp = new paper.CompoundPath(\"\");\n\n const bodyWidth = filterNumber * filterWidth + (filterNumber - 1) * barrierWidth;\n\n // inlet\n let topLeft = new paper.Point(x, y - inletWidth / 2);\n let bottomRight = new paper.Point(x + inletLength, y + inletWidth / 2);\n\n serp.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n // left pillar\n topLeft = new paper.Point(x + inletLength, y - inletWidth / 2);\n let topRight = new paper.Point(x + inletLength + 2.5 * pillarDiameter, y - bodyWidth / 2);\n let bottomLeft = new paper.Point(x + inletLength, y + inletWidth / 2);\n bottomRight = new paper.Point(x + inletLength + 2.5 * pillarDiameter, y + bodyWidth / 2);\n\n let pillarPath: paper.Path | paper.PathItem = new paper.Path();\n (pillarPath as paper.Path).add(topLeft);\n (pillarPath as paper.Path).add(topRight);\n (pillarPath as paper.Path).add(bottomRight);\n (pillarPath as paper.Path).add(bottomLeft);\n\n let circ = new paper.Path.Circle(new paper.Point(x + inletLength + 1.5 * pillarDiameter, y), pillarDiameter / 2);\n\n pillarPath = pillarPath.subtract(circ);\n\n serp.addChild(pillarPath);\n\n // body tube\n let startBody = inletLength + 2.5 * pillarDiameter;\n const extraSpace = 0.3 * filterLength;\n\n for (let i = 0; i < levelNumber; i++) {\n topLeft = new paper.Point(x + startBody, y - bodyWidth / 2);\n bottomRight = new paper.Point(x + startBody + filterLength + extraSpace, y + bodyWidth / 2);\n\n let rec: paper.PathItem | paper.Rectangle = new paper.Path.Rectangle(topLeft, bottomRight);\n\n if (i % 2 === 0) {\n const division = (bodyWidth - (filterNumber - 1) * barrierWidth) / filterNumber;\n let heightAccum = division;\n\n for (let j = 0; j < filterNumber - 1; j++) {\n topLeft = new paper.Point(x + startBody + extraSpace / 2, y - bodyWidth / 2 + heightAccum);\n heightAccum += barrierWidth;\n bottomRight = new paper.Point(x + startBody + filterLength, y - bodyWidth / 2 + heightAccum);\n\n const cutrec = new paper.Path.Rectangle(topLeft, bottomRight);\n\n rec = rec.subtract(cutrec);\n\n heightAccum += division;\n }\n } else {\n const division = (bodyWidth - (filterNumber - 2) * barrierWidth) / (filterNumber - 1);\n let heightAccum = division;\n\n for (let j = 0; j < filterNumber - 2; j++) {\n topLeft = new paper.Point(x + startBody + extraSpace / 2, y - bodyWidth / 2 + heightAccum);\n heightAccum += barrierWidth;\n bottomRight = new paper.Point(x + startBody + filterLength, y - bodyWidth / 2 + heightAccum);\n\n const cutrec = new paper.Path.Rectangle(topLeft, bottomRight);\n\n rec = rec.subtract(cutrec);\n\n heightAccum += division;\n }\n }\n\n serp.addChild(rec);\n\n startBody += filterLength + extraSpace;\n }\n\n // right pillar\n topLeft = new paper.Point(x + startBody, y - bodyWidth / 2);\n topRight = new paper.Point(x + startBody + 2.5 * pillarDiameter, y - outletWidth / 2);\n bottomRight = new paper.Point(x + startBody + 2.5 * pillarDiameter, y + outletWidth / 2);\n bottomLeft = new paper.Point(x + startBody, y + bodyWidth / 2);\n\n pillarPath = new paper.Path();\n\n (pillarPath as paper.Path).add(topLeft);\n (pillarPath as paper.Path).add(topRight);\n (pillarPath as paper.Path).add(bottomRight);\n (pillarPath as paper.Path).add(bottomLeft);\n\n startBody += 2.5 * pillarDiameter;\n\n circ = new paper.Path.Circle(new paper.Point(x + startBody - 1.5 * pillarDiameter, y), pillarDiameter / 2);\n\n pillarPath = pillarPath.subtract(circ);\n\n serp.addChild(pillarPath);\n\n // outlet\n topLeft = new paper.Point(x + startBody, y - outletWidth / 2);\n bottomRight = new paper.Point(x + startBody + outletLength, y + outletWidth / 2);\n\n serp.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n serp.rotate(rotation, new paper.Point(x, y));\n\n serp.fillColor = color;\n return serp;\n }\n\n render2DTarget(key: string | null, params: { [k: string]: any }) {\n if (key === null) {\n key = this.__renderKeys[0];\n }\n const serp = this.render2D(params, key);\n serp.fillColor!.alpha = 0.5;\n return serp;\n }\n}\n","import Template from \"./template\";\nimport paper from \"paper\";\nimport ComponentPort from \"../core/componentPort\";\nimport { LogicalLayerType } from \"../core/init\";\n\nexport default class CellTrapS extends Template {\n constructor() {\n super();\n }\n\n __setupDefinitions(): void {\n this.__unique = {\n position: \"Point\"\n };\n\n this.__heritable = {\n componentSpacing: \"Float\",\n rotation: \"Float\",\n height: \"Float\",\n channelWidth: \"Float\",\n channelLength: \"Float\",\n chamberWidth: \"Float\",\n chamberLength: \"Float\",\n chamberHeight: \"Float\"\n };\n\n this.__defaults = {\n componentSpacing: 1000,\n rotation: 0,\n height: 250,\n channelWidth: 1 * 1000,\n channelLength: 4 * 1000,\n chamberWidth: 2.5 * 1000,\n chamberLength: 2.5 * 1000,\n chamberHeight: 250\n };\n\n this.__units = {\n componentSpacing: \"μm\",\n rotation: \"°\",\n height: \"μm\",\n channelWidth: \"μm\",\n channelLength: \"μm\",\n chamberWidth: \"μm\",\n chamberLength: \"μm\",\n chamberHeight: \"μm\"\n };\n\n this.__minimum = {\n componentSpacing: 0,\n rotation: 0,\n height: 10,\n channelWidth: 0.5 * 1000,\n channelLength: 2.5 * 1000,\n chamberWidth: 1.5 * 1000,\n chamberLength: 1.5 * 1000,\n chamberHeight: 10\n };\n\n this.__maximum = {\n componentSpacing: 10000,\n rotation: 360,\n height: 1200,\n channelWidth: 2 * 1000,\n channelLength: 6 * 1000,\n chamberWidth: 4 * 1000,\n chamberLength: 4 * 1000,\n chamberHeight: 1200\n };\n\n this.__featureParams = {\n componentSpacing: \"componentSpacing\",\n position: \"position\",\n rotation: \"rotation\",\n height: \"height\",\n channelWidth: \"channelWidth\",\n channelLength: \"channelLength\",\n chamberWidth: \"chamberWidth\",\n chamberLength: \"chamberLength\",\n chamberHeight: \"chamberHeight\"\n };\n\n this.__targetParams = {\n componentSpacing: \"componentSpacing\",\n rotation: \"rotation\",\n height: \"height\",\n channelWidth: \"channelWidth\",\n channelLength: \"channelLength\",\n chamberWidth: \"chamberWidth\",\n chamberLength: \"chamberLength\",\n chamberHeight: \"chamberHeight\"\n };\n\n this.__placementTool = \"CellPositionTool\";\n\n this.__toolParams = {\n position: \"position\"\n };\n\n this.__renderKeys = [\"FLOW\", \"CELL\"];\n\n this.__mint = \"SQUARE CELL TRAP\";\n\n this.__zOffsetKeys = {\n FLOW: \"height\",\n CELL: \"chamberHeight\"\n };\n\n this.__substrateOffset = {\n FLOW: \"0\",\n CELL: \"0\"\n };\n }\n\n getPorts(params: { [k: string]: any }) {\n const channelLength = params.channelLength;\n\n const ports = [];\n\n ports.push(new ComponentPort(-channelLength / 2, 0, \"1\", LogicalLayerType.FLOW));\n\n ports.push(new ComponentPort(channelLength / 2, 0, \"2\", LogicalLayerType.FLOW));\n\n ports.push(new ComponentPort(0, -channelLength / 2, \"3\", LogicalLayerType.FLOW));\n\n ports.push(new ComponentPort(0, channelLength / 2, \"4\", LogicalLayerType.FLOW));\n\n return ports;\n }\n\n render2D(params: { [k: string]: any }, key: string) {\n if (key === \"FLOW\") {\n return this.__drawFlow(params);\n } else if (key === \"CELL\") {\n return this.__drawCell(params);\n }else{\n throw new Error(\"Unknown key for celltrapS: \" + key);\n }\n }\n\n render2DTarget(key: string | null, params: { [k: string]: any }) {\n const traps = this.__drawFlow(params);\n traps.addChild(this.__drawCell(params));\n\n traps.fillColor!.alpha = 0.5;\n\n return traps;\n }\n\n __drawFlow(params: { [k: string]: any }) {\n const rotation = params.rotation;\n const position = params.position;\n const color = params.color;\n const x = position[0];\n const y = position[1];\n const channelWidth = params.channelWidth;\n const channelLength = params.channelLength;\n\n const traps = new paper.CompoundPath(\"\");\n\n // horizontal channel\n let topLeft = new paper.Point(x - channelLength / 2, y - channelWidth / 2);\n let bottomRight = new paper.Point(x + channelLength / 2, y + channelWidth / 2);\n\n traps.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n // vertical channel\n topLeft = new paper.Point(x - channelWidth / 2, y - channelLength / 2);\n bottomRight = new paper.Point(x + channelWidth / 2, y + channelLength / 2);\n\n traps.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n traps.fillColor = color;\n\n traps.rotate(rotation, new paper.Point(x, y));\n\n return traps;\n }\n\n __drawCell(params: { [k: string]: any }) {\n const rotation = params.rotation;\n const color = params.color;\n const position = params.position;\n const x = position[0];\n const y = position[1];\n const chamberWidth = params.chamberWidth;\n const chamberLength = params.chamberLength;\n\n const chamberList = new paper.CompoundPath(\"\");\n\n // chamber\n const topLeft = new paper.Point(x - chamberWidth / 2, y - chamberLength / 2);\n const bottomRight = new paper.Point(x + chamberWidth / 2, y + chamberLength / 2);\n\n chamberList.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n chamberList.fillColor = color;\n chamberList.rotate(rotation, new paper.Point(x, y));\n\n return chamberList;\n }\n}\n","import Template from \"./template\";\nimport paper, { CompoundPath } from \"paper\";\nimport ComponentPort from \"../core/componentPort\";\nimport { LogicalLayerType } from \"../core/init\";\n\nexport default class ThreeDMux extends Template {\n constructor() {\n super();\n }\n\n __setupDefinitions(): void {\n this.__unique = {\n position: \"Point\"\n };\n\n this.__heritable = {\n componentSpacing: \"Float\",\n in: \"Integer\",\n out: \"Integer\",\n rotation: \"Float\",\n valveRadius: \"Float\",\n height: \"Float\",\n gap: \"Float\",\n width: \"Float\",\n length: \"Float\",\n valveSpacing: \"Float\",\n channelWidth: \"Float\",\n controlChannelWidth: \"Float\"\n };\n\n this.__defaults = {\n componentSpacing: 1000,\n in: 1,\n out: 8,\n rotation: 0,\n valveRadius: 1.2 * 1000,\n height: 0.8 * 1000,\n gap: 0.6 * 1000,\n width: 100,\n length: 100,\n valveSpacing: 0.6 * 1000,\n channelWidth: 500,\n controlChannelWidth: 0.6 * 1000\n };\n\n this.__units = {\n componentSpacing: \"μm\",\n in: \"\",\n out: \"\",\n rotation: \"°\",\n valveRadius: \"μm\",\n height: \"μm\",\n gap: \"μm\",\n width: \"μm\",\n length: \"μm\",\n valveSpacing: \"μm\",\n channelWidth: \"μm\",\n controlChannelWidth: \"μm\"\n };\n\n this.__minimum = {\n componentSpacing: 0,\n in: 1,\n out: 2,\n rotation: 0,\n valveRadius: 0.1 * 100,\n height: 0.1 * 100,\n gap: 0.5 * 10,\n width: 100,\n length: 100,\n valveSpacing: 0.1 * 1000,\n channelWidth: 25,\n controlChannelWidth: 10\n };\n\n this.__maximum = {\n componentSpacing: 10000,\n in: 1,\n out: 128,\n rotation: 360,\n valveRadius: 0.2 * 10000,\n height: 1.2 * 1000,\n gap: 0.1 * 10000,\n width: 100,\n length: 100,\n valveSpacing: 0.1 * 10000,\n channelWidth: 25e3,\n controlChannelWidth: 1000\n };\n\n this.__featureParams = {\n componentSpacing: \"componentSpacing\",\n in: \"in\",\n out: \"out\",\n position: \"position\",\n rotation: \"rotation\",\n radius1: \"valveRadius\",\n radius2: \"valveRadius\",\n valveRadius: \"valveRadius\",\n gap: \"gap\",\n width: \"width\",\n length: \"length\",\n valveSpacing: \"valveSpacing\",\n channelWidth: \"channelWidth\",\n controlChannelWidth: \"controlChannelWidth\"\n };\n\n this.__targetParams = {\n componentSpacing: \"componentSpacing\",\n in: \"in\",\n out: \"out\",\n position: \"position\",\n rotation: \"rotation\",\n radius1: \"valveRadius\",\n radius2: \"valveRadius\",\n valveRadius: \"valveRadius\",\n gap: \"gap\",\n width: \"width\",\n length: \"length\",\n valveSpacing: \"valveSpacing\",\n channelWidth: \"channelWidth\",\n controlChannelWidth: \"controlChannelWidth\"\n };\n\n this.__placementTool = \"multilayerPositionTool\";\n\n this.__toolParams = {\n position: \"position\"\n };\n\n this.__renderKeys = [\"FLOW\", \"CONTROL\", \"INVERSE\"];\n\n this.__mint = \"MUX3D\";\n\n this.__zOffsetKeys = {\n FLOW: \"height\",\n CONTROL: \"height\",\n INVERSE: \"height\"\n };\n\n this.__substrateOffset = {\n FLOW: \"0\",\n CONTROL: \"+1\",\n INVERSE: \"0\"\n };\n }\n\n render2D(params: { [k: string]: any }, key: string) {\n if (key === \"FLOW\") {\n return this.__drawFlow(params);\n } else if (key === \"CONTROL\") {\n return this.__drawControl(params);\n } else if (key === \"INVERSE\") {\n return this.__drawInverse(params);\n }else{\n throw new Error(\"Unknown key threedmux: \" + key);\n }\n }\n\n render2DTarget(key: string | null, params: { [k: string]: any }) {\n const ret = new paper.CompoundPath(\"\");\n const flow = this.render2D(params, \"FLOW\");\n const control = this.render2D(params, \"CONTROL\");\n ret.addChild((control as unknown) as paper.CompoundPath);\n ret.addChild((flow as unknown) as paper.CompoundPath);\n ret.fillColor = params.color;\n ret.fillColor!.alpha = 0.5;\n return ret;\n }\n\n getPorts(params: { [k: string]: any }) {\n const ins = params.in;\n const outs = params.out;\n let N;\n const channelWidth = params.channelWidth;\n let rotation = params.rotation;\n\n if (ins < outs) {\n N = outs;\n } else {\n N = ins;\n rotation += 180;\n }\n\n const horizontal_length = N * 4000;\n const vertical_length = N * 3000;\n const ports = [];\n\n for (let i = 0; i < N; i++) {\n const xpos = i * (horizontal_length / (N - 1));\n ports.push(new ComponentPort(xpos, 0, (i + 1).toString(), LogicalLayerType.FLOW));\n }\n\n ports.push(new ComponentPort(horizontal_length / 2, vertical_length + N * 1000, (N + 1).toString(), LogicalLayerType.FLOW));\n const bottomlinelength = N * 4000; // modify, so it depends on the input N\n const vertlinelength = N * 3000; // same as above\n\n const leftInput = -N * 1000;\n const rightInput = bottomlinelength + N * 1000;\n let indexN = N;\n const valvenum = Math.log(N) / Math.log(2);\n const vertholder = vertlinelength / (2 * valvenum);\n\n let count = N + 2;\n\n for (let i = 0; i < 2 * valvenum; i++) {\n // left side\n if (i % 2 === 0) {\n indexN /= 2;\n const cur_ind = N - indexN - 1;\n // let leftsideLeft = new paper.Point(leftInput, vertholder + (i) * vertlinelength/(2*valvenum + 2) - channelWidth/2);\n ports.push(new ComponentPort(leftInput, vertholder + (i * vertlinelength) / (2 * valvenum + 2), count.toString(), LogicalLayerType.CONTROL));\n console.log(count);\n count++;\n }\n // right side\n else {\n ports.push(new ComponentPort(rightInput, vertholder + (i * vertlinelength) / (2 * valvenum + 2), count.toString(), LogicalLayerType.CONTROL));\n console.log(count);\n count++;\n }\n }\n\n return ports;\n }\n\n __drawFlow(params: { [k: string]: any }) {\n const position = params.position;\n const gap = params.gap;\n const radius = params.valveRadius;\n const color = params.color;\n let rotation = params.rotation;\n const channelWidth = params.channelWidth;\n const threedmux_flow = new paper.CompoundPath(\"\");\n\n const px = position[0];\n const py = position[1];\n const ins = params.in;\n const outs = params.out;\n let N;\n if (ins < outs) {\n N = outs;\n } else {\n N = ins;\n rotation += 180;\n }\n const bottomlinelength = N * 4000; // modify, so it depends on the input N\n const vertlinelength = N * 3000; // same as above\n\n const bottomlineleft = new paper.Point(px - channelWidth / 2, py - channelWidth / 2 + vertlinelength);\n const bottomlineright = new paper.Point(px + bottomlinelength + channelWidth / 2, py + channelWidth / 2 + vertlinelength);\n const channel = new paper.Path.Rectangle(bottomlineleft, bottomlineright);\n\n threedmux_flow.addChild(channel);\n\n const valvenum = Math.log(N) / Math.log(2);\n const valveselect = vertlinelength / (2 * valvenum);\n const branchArray = new Array(N);\n const centerArray = new Array(N);\n\n // create base flow\n for (let i = 0; i < N; i++) {\n const xposbranch = i * (bottomlinelength / (N - 1));\n\n const vertlinebottom = new paper.Point(px + xposbranch - channelWidth / 2, py + vertlinelength);\n const vertlinetop = new paper.Point(px + xposbranch + channelWidth / 2, py);\n branchArray[i] = new paper.Path.Rectangle(vertlinebottom, vertlinetop);\n }\n\n // create output port\n const portCon = new paper.Point(px + bottomlinelength / 2 - channelWidth / 2, py + vertlinelength);\n const portOut = new paper.Point(px + bottomlinelength / 2 + channelWidth / 2, py + vertlinelength + N * 1000);\n\n const portRec = new paper.Path.Rectangle(portCon, portOut);\n\n threedmux_flow.addChild(portRec);\n\n // add valves and remove parts of channels\n let cur_N = N;\n const xpos = px;\n let ypos = py + valveselect;\n\n for (let j = 0; j < valvenum; j++) {\n // left side\n let count1 = 0;\n const increment1 = cur_N / 2;\n while (count1 < N) {\n for (let w = 0; w < cur_N / 2; w++) {\n const current_xpos = xpos + ((count1 + w) * bottomlinelength) / (N - 1);\n\n const cutrec = new paper.Path.Rectangle({\n from: new paper.Point(current_xpos - channelWidth / 2, ypos - gap / 2),\n to: new paper.Point(current_xpos + channelWidth / 2, ypos + gap / 2)\n });\n\n this.__createthreedmuxValve(threedmux_flow, current_xpos, ypos, gap, radius, rotation, channelWidth);\n branchArray[count1 + w] = branchArray[count1 + w].subtract(cutrec); // remove a portion from the selected channel\n }\n\n count1 += 2 * increment1;\n }\n\n // right side\n const ypos_adjust = vertlinelength / (2 * valvenum + 2);\n let count2 = 0;\n const increment2 = cur_N / 2;\n ypos += ypos_adjust;\n\n while (count2 < N) {\n for (let w = 0; w < cur_N / 2; w++) {\n const current_xpos = xpos + bottomlinelength - ((count2 + w) * bottomlinelength) / (N - 1);\n\n const cutrec = new paper.Path.Rectangle({\n from: new paper.Point(current_xpos - channelWidth / 2, ypos - gap / 2),\n to: new paper.Point(current_xpos + channelWidth / 2, ypos + gap / 2)\n });\n\n branchArray[N - 1 - w - count2] = branchArray[N - 1 - w - count2].subtract(cutrec);\n this.__createthreedmuxValve(threedmux_flow, current_xpos, ypos, gap, radius, rotation, channelWidth);\n }\n count2 += increment2 + cur_N / 2;\n }\n ypos += ypos_adjust;\n cur_N = cur_N / 2;\n }\n\n for (let i = 0; i < N; i++) {\n threedmux_flow.addChild(branchArray[i]);\n // threedmux_flow.addChild(centerArray[i]);\n }\n\n threedmux_flow.fillColor = color;\n\n threedmux_flow.rotate(rotation, new paper.Point(px, py));\n\n return threedmux_flow;\n }\n\n __createthreedmuxValve(compound_path: paper.CompoundPath, xpos: number, ypos: number, gap: number, radius: number, rotation: number, channel_width: number): void {\n const center = new paper.Point(xpos, ypos);\n\n // Create the basic circle\n let circ: paper.Path.Circle | paper.PathItem = new paper.Path.Circle(center, radius);\n\n // Add the tiny channel pieces that jut out\n let rec = new paper.Path.Rectangle({\n point: new paper.Point(xpos - channel_width / 2, ypos - radius),\n size: [channel_width, radius],\n stokeWidth: 0\n });\n\n circ = circ.unite(rec);\n\n rec = new paper.Path.Rectangle({\n point: new paper.Point(xpos - channel_width / 2, ypos),\n size: [channel_width, radius],\n stokeWidth: 0\n });\n\n circ = circ.unite(rec);\n\n const cutout = new paper.Path.Rectangle({\n from: new paper.Point(xpos - radius, ypos - gap / 2),\n to: new paper.Point(xpos + radius, ypos + gap / 2)\n });\n\n const valve = circ.subtract(cutout);\n\n compound_path.addChild(valve);\n }\n\n __drawControl(params: { [k: string]: any }) {\n const position = params.position;\n const radius = params.valveRadius;\n const color = params.color;\n let rotation = params.rotation;\n const channelWidth = params.controlChannelWidth;\n const threedmux_control = new paper.CompoundPath(\"\");\n\n const px = position[0];\n const py = position[1];\n\n const ins = params.in;\n const outs = params.out;\n\n let N;\n if (ins < outs) {\n N = outs;\n } else {\n N = ins;\n rotation += 180;\n }\n\n const bottomlinelength = N * 4000; // modify, so it depends on the input N\n const vertlinelength = N * 3000; // same as above\n\n const leftInput = px - N * 1000;\n const rightInput = px + bottomlinelength + N * 1000;\n let indexN = N;\n const valvenum = Math.log(N) / Math.log(2);\n const vertholder = vertlinelength / (2 * valvenum);\n const valveselect = vertlinelength / (2 * valvenum);\n\n for (let i = 0; i < 2 * valvenum; i++) {\n // left side\n if (i % 2 === 0) {\n indexN /= 2;\n const cur_ind = N - indexN - 1;\n const leftsideLeft = new paper.Point(leftInput, py + vertholder + (i * vertlinelength) / (2 * valvenum + 2) - channelWidth / 2);\n const leftsideRight = new paper.Point(px + cur_ind * (bottomlinelength / (N - 1)), py + vertholder + (i * vertlinelength) / (2 * valvenum + 2) + channelWidth / 2);\n const leftcontrol = new paper.Path.Rectangle(leftsideLeft, leftsideRight);\n\n threedmux_control.addChild(leftcontrol);\n }\n // right side\n else {\n const cur_ind = indexN;\n const rightsideLeft = new paper.Point(px + cur_ind * (bottomlinelength / (N - 1)), py + vertholder + (i * vertlinelength) / (2 * valvenum + 2) - channelWidth / 2);\n const rightsideRight = new paper.Point(rightInput, py + vertholder + (i * vertlinelength) / (2 * valvenum + 2) + channelWidth / 2);\n const rightcontrol = new paper.Path.Rectangle(rightsideLeft, rightsideRight);\n\n threedmux_control.addChild(rightcontrol);\n }\n }\n\n let cur_N = N;\n const xpos = px;\n let ypos = py + valveselect;\n\n for (let j = 0; j < valvenum; j++) {\n // left side\n let count1 = 0;\n const increment1 = cur_N / 2;\n while (count1 < N) {\n for (let w = 0; w < cur_N / 2; w++) {\n const current_xpos = xpos + ((count1 + w) * bottomlinelength) / (N - 1);\n const center = new paper.Point(current_xpos, ypos);\n const circle = new paper.Path.Circle(center, radius);\n threedmux_control.addChild(circle);\n }\n\n count1 += 2 * increment1;\n }\n\n // right side\n const ypos_adjust = vertlinelength / (2 * valvenum + 2);\n let count2 = 0;\n const increment2 = cur_N / 2;\n ypos += ypos_adjust;\n\n while (count2 < N) {\n for (let w = 0; w < cur_N / 2; w++) {\n const current_xpos = xpos + bottomlinelength - ((count2 + w) * bottomlinelength) / (N - 1);\n const center = new paper.Point(current_xpos, ypos);\n const circle = new paper.Path.Circle(center, radius);\n threedmux_control.addChild(circle);\n }\n count2 += increment2 + cur_N / 2;\n }\n ypos += ypos_adjust;\n cur_N = cur_N / 2;\n }\n\n threedmux_control.fillColor = color;\n threedmux_control.rotate(rotation, new paper.Point(px, py));\n\n return threedmux_control;\n }\n\n __drawInverse(params: { [k: string]: any }) {\n const position = params.position;\n const radius = params.valveRadius;\n const color = params.color;\n let rotation = params.rotation;\n const threedmux_control = new paper.CompoundPath(\"\");\n\n const px = position[0];\n const py = position[1];\n\n const ins = params.in;\n const outs = params.out;\n\n let N;\n if (ins < outs) {\n N = outs;\n } else {\n N = ins;\n rotation += 180;\n }\n\n const bottomlinelength = N * 4000; // modify, so it depends on the input N\n const vertlinelength = N * 3000; // same as above\n\n const leftInput = px - N * 1000;\n const rightInput = px + bottomlinelength + N * 1000;\n let indexN = N;\n const valvenum = Math.log(N) / Math.log(2);\n const vertholder = vertlinelength / (2 * valvenum);\n const valveselect = vertlinelength / (2 * valvenum);\n\n let cur_N = N;\n const xpos = px;\n let ypos = py + valveselect;\n\n for (let j = 0; j < valvenum; j++) {\n // left side\n let count1 = 0;\n const increment1 = cur_N / 2;\n while (count1 < N) {\n for (let w = 0; w < cur_N / 2; w++) {\n const current_xpos = xpos + ((count1 + w) * bottomlinelength) / (N - 1);\n const center = new paper.Point(current_xpos, ypos);\n const circle = new paper.Path.Circle(center, radius);\n threedmux_control.addChild(circle);\n }\n\n count1 += 2 * increment1;\n }\n\n // right side\n const ypos_adjust = vertlinelength / (2 * valvenum + 2);\n let count2 = 0;\n const increment2 = cur_N / 2;\n ypos += ypos_adjust;\n\n while (count2 < N) {\n for (let w = 0; w < cur_N / 2; w++) {\n const current_xpos = xpos + bottomlinelength - ((count2 + w) * bottomlinelength) / (N - 1);\n const center = new paper.Point(current_xpos, ypos);\n const circle = new paper.Path.Circle(center, radius);\n threedmux_control.addChild(circle);\n }\n count2 += increment2 + cur_N / 2;\n }\n ypos += ypos_adjust;\n cur_N = cur_N / 2;\n }\n\n threedmux_control.fillColor = color;\n threedmux_control.rotate(rotation, new paper.Point(px, py));\n\n return threedmux_control;\n }\n}","import Template from \"./template\";\nimport paper, { CompoundPath } from \"paper\";\nimport ComponentPort from \"../core/componentPort\";\nimport { LogicalLayerType } from \"../core/init\";\n\nexport default class ChemostatRing extends Template {\n constructor() {\n super();\n }\n\n __setupDefinitions(): void {\n this.__unique = {\n position: \"Point\"\n };\n\n this.__heritable = {\n componentSpacing: \"Float\",\n flowChannelWidth: \"Float\",\n controlChannelWidth: \"Float\",\n chemostatChannelWidth: \"Float\",\n radius: \"Float\",\n rotation: \"Float\",\n volume: \"Float\",\n height: \"Float\"\n };\n\n this.__defaults = {\n componentSpacing: 1000,\n flowChannelWidth: 100,\n controlChannelWidth: 50,\n chemostatChannelWidth: 100,\n radius: 400,\n rotation: 0,\n volume: 30000000,\n height: 20\n };\n\n this.__units = {\n bendSpacing: \"μm\",\n numberOfBends: \"\",\n channelWidth: \"μm\",\n bendLength: \"μm\",\n componentSpacing: \"μm\",\n flowChannelWidth: \"μm\",\n controlChannelWidth: \"μm\",\n chemostatChannelWidth: \"μm\",\n radius: \"μm\",\n rotation: \"°\",\n volume: \"μm3\",\n height: \"μm\"\n };\n\n this.__minimum = {\n componentSpacing: 0,\n flowChannelWidth: 0.1 * 1000,\n controlChannelWidth: 0.1 * 1000,\n chemostatChannelWidth: 0.2 * 1000,\n radius: 0.2 * 1000,\n rotation: 0,\n volume: 0.1 * 1000 * 1 * 1000 * 4 * 0.2 * 1000,\n height: 0.2 * 1000\n };\n\n this.__maximum = {\n componentSpacing: 10000,\n flowChannelWidth: 0.3 * 10000,\n controlChannelWidth: 0.15 * 10000,\n chemostatChannelWidth: 0.5 * 10000,\n radius: 10000,\n rotation: 260,\n volume: 0.5 * 10000 * 10 * 1000 * 4 * 1 * 10000,\n height: 1 * 10000\n };\n\n this.__placementTool = \"multilayerPositionTool\";\n\n this.__toolParams = {\n cursorPosition: \"position\"\n };\n\n this.__featureParams = {\n position: \"position\",\n componentSpacing: \"componentSpacing\",\n flowChannelWidth: \"flowChannelWidth\",\n controlChannelWidth: \"controlChannelWidth\",\n chemostatChannelWidth: \"chemostatChannelWidth\",\n radius: \"radius\",\n rotation: \"rotation\",\n volume: \"volume\",\n height: \"height\"\n };\n\n this.__targetParams = {\n componentSpacing: \"componentSpacing\",\n flowChannelWidth: \"flowChannelWidth\",\n controlChannelWidth: \"controlChannelWidth\",\n chemostatChannelWidth: \"chemostatChannelWidth\",\n radius: \"radius\",\n rotation: \"rotation\",\n volume: \"volume\",\n height: \"height\"\n };\n\n this.__renderKeys = [\"FLOW\", \"CONTROL\"];\n\n this.__mint = \"CHEMOSTAT RING\";\n\n this.__zOffsetKeys = {\n FLOW: \"height\",\n CONTROL: \"height\"\n };\n\n this.__substrateOffset = {\n FLOW: \"0\",\n CONTROL: \"+1\"\n };\n }\n\n getPorts(params: { [k: string]: any }) {\n const flowChannelWidth = params.flowChannelWidth;\n const controlChannelWidth = params.controlChannelWidth;\n const chemostatChannelWidth = params.chemostatChannelWidth;\n const volume = params.volume;\n const height = params.height;\n const radius = params.radius;\n\n const area = volume / height;\n const chemostatLength = area / (4 * chemostatChannelWidth);\n\n const controlSpacing = chemostatLength / 10;\n const controlendpoint = (-7 * chemostatLength) / 8;\n const bendDist = chemostatLength / 15;\n\n const ports = [];\n\n // flow\n ports.push(new ComponentPort(-chemostatLength / 3 - chemostatLength / 2, -chemostatLength / 3, \"1\", LogicalLayerType.FLOW));\n ports.push(new ComponentPort(-chemostatLength / 3 - chemostatLength / 5, -chemostatLength / 3 - chemostatLength / 3, \"2\", LogicalLayerType.FLOW));\n ports.push(new ComponentPort(-chemostatLength / 3 + chemostatLength / 5, -chemostatLength / 3 - chemostatLength / 3, \"3\", LogicalLayerType.FLOW));\n ports.push(new ComponentPort(-chemostatLength / 3 + chemostatLength / 2, -chemostatLength / 3, \"4\", LogicalLayerType.FLOW));\n // ports.push(new ComponentPort(chemostatChannelWidth + chemostatLength + 2 * chemostatLength/5, chemostatChannelWidth/2 + 7 * chemostatLength/11, \"5\", \"FLOW\"));\n\n // control\n // 1\n ports.push(new ComponentPort(-chemostatLength / 3 - chemostatLength / 5 - controlSpacing - radius, controlendpoint, \"5\", LogicalLayerType.CONTROL));\n // 2\n ports.push(new ComponentPort(-chemostatLength / 3 - chemostatLength / 5 + 1.3 * radius, controlendpoint, \"6\", LogicalLayerType.CONTROL));\n // 3\n ports.push(new ComponentPort(-chemostatLength / 3 - chemostatLength / 5 + 1.7 * radius, controlendpoint, \"7\", LogicalLayerType.CONTROL));\n // 4\n ports.push(new ComponentPort(-chemostatLength / 3 + chemostatLength / 5 - controlSpacing - radius, controlendpoint, \"8\", LogicalLayerType.CONTROL));\n // 5\n ports.push(new ComponentPort(-chemostatLength / 3 + chemostatLength / 5 + 1.3 * radius, controlendpoint, \"9\", LogicalLayerType.CONTROL));\n // 6\n ports.push(new ComponentPort(-chemostatLength / 3 + chemostatLength / 5 + 1.7 * radius, controlendpoint, \"10\", LogicalLayerType.CONTROL));\n\n let originx = chemostatChannelWidth / 2 + (3 * chemostatLength) / 7;\n let originy = chemostatChannelWidth / 2;\n\n // 7\n ports.push(new ComponentPort(originx - controlSpacing - 0.5 * radius, controlendpoint, \"11\", LogicalLayerType.CONTROL));\n // 8\n ports.push(new ComponentPort(originx + 1.3 * radius, controlendpoint, \"12\", LogicalLayerType.CONTROL));\n // 9\n ports.push(new ComponentPort(originx + 1.7 * radius, controlendpoint, \"13\", LogicalLayerType.CONTROL));\n\n originx = (5 * chemostatLength) / 6;\n originy = chemostatChannelWidth / 2;\n\n // 10\n ports.push(new ComponentPort(originx - controlSpacing - 0.5 * radius, controlendpoint, \"14\", LogicalLayerType.CONTROL));\n // 11\n ports.push(new ComponentPort(originx + 1.3 * radius, controlendpoint, \"15\", LogicalLayerType.CONTROL));\n // 12\n ports.push(new ComponentPort(originx + 1.7 * radius, controlendpoint, \"16\", LogicalLayerType.CONTROL));\n\n originx = chemostatChannelWidth / 2;\n originy = chemostatLength / 5;\n\n // 13\n ports.push(new ComponentPort(controlendpoint, originy - controlSpacing - 0.5 * radius, \"17\", LogicalLayerType.CONTROL));\n // 14\n ports.push(new ComponentPort(controlendpoint, originy + 1.3 * radius, \"18\", LogicalLayerType.CONTROL));\n // 15\n ports.push(new ComponentPort(controlendpoint, originy + 1.7 * radius, \"19\", LogicalLayerType.CONTROL));\n\n originx = chemostatChannelWidth / 2;\n originy = chemostatLength / 5 + chemostatLength / 2;\n\n // 16\n ports.push(new ComponentPort(controlendpoint, originy - controlSpacing - 0.5 * radius, \"20\", LogicalLayerType.CONTROL));\n // 17\n ports.push(new ComponentPort(controlendpoint, originy + 1.3 * radius, \"21\", LogicalLayerType.CONTROL));\n // 18\n ports.push(new ComponentPort(controlendpoint, originy + 1.7 * radius, \"22\", LogicalLayerType.CONTROL));\n\n originx = chemostatChannelWidth / 2 + chemostatLength;\n originy = chemostatChannelWidth / 2 + (2 * chemostatLength) / 5;\n\n // 19\n ports.push(new ComponentPort(2 * chemostatLength, originy - controlSpacing - 0.5 * radius, \"23\", LogicalLayerType.CONTROL));\n // 20\n ports.push(new ComponentPort(2 * chemostatLength, originy + 1.3 * radius, \"24\", LogicalLayerType.CONTROL));\n // 21\n ports.push(new ComponentPort(2 * chemostatLength, originy + 1.7 * radius, \"25\", LogicalLayerType.CONTROL));\n\n originx = chemostatChannelWidth / 2 + chemostatLength;\n originy = chemostatChannelWidth / 2 + (4 * chemostatLength) / 5;\n\n // 22\n ports.push(new ComponentPort(2 * chemostatLength, originy - controlSpacing - 0.5 * radius, \"26\", LogicalLayerType.CONTROL));\n // 23\n ports.push(new ComponentPort(2 * chemostatLength, originy + 1.3 * radius, \"27\", LogicalLayerType.CONTROL));\n // 24\n ports.push(new ComponentPort(2 * chemostatLength, originy + 1.7 * radius, \"28\", LogicalLayerType.CONTROL));\n\n originx = chemostatChannelWidth / 2 + chemostatLength / 4;\n originy = chemostatLength + chemostatChannelWidth / 2;\n\n // 25\n ports.push(new ComponentPort(originx - 0.3 * controlSpacing, 2 * chemostatLength, \"29\", LogicalLayerType.CONTROL));\n // 26\n ports.push(new ComponentPort(originx + 0.5 * controlSpacing, 2 * chemostatLength, \"30\", LogicalLayerType.CONTROL));\n // 27\n ports.push(new ComponentPort(originx + 0.4 * controlSpacing + 0.3 * controlSpacing, 2 * chemostatLength, \"31\", LogicalLayerType.CONTROL));\n\n originx = chemostatChannelWidth / 2 + (3 * chemostatLength) / 7;\n originy = chemostatLength + chemostatChannelWidth / 2;\n\n // 28\n ports.push(new ComponentPort(originx - 0.3 * controlSpacing, 2 * chemostatLength, \"32\", LogicalLayerType.CONTROL));\n // 29\n ports.push(new ComponentPort(originx - 0.5 * controlSpacing, 2 * chemostatLength, \"33\", LogicalLayerType.CONTROL));\n // 30\n ports.push(new ComponentPort(originx + 0.3 * controlSpacing, 2 * chemostatLength, \"34\", LogicalLayerType.CONTROL));\n\n // 31\n ports.push(new ComponentPort(originx + 0.55 * controlSpacing, 2 * chemostatLength, \"35\", LogicalLayerType.CONTROL));\n // 32\n ports.push(new ComponentPort(originx + 0.85 * controlSpacing, 2 * chemostatLength, \"36\", LogicalLayerType.CONTROL));\n // 33\n ports.push(new ComponentPort(originx + 1.15 * controlSpacing, 2 * chemostatLength, \"37\", LogicalLayerType.CONTROL));\n\n originx = chemostatChannelWidth / 2 + (3 * chemostatLength) / 5;\n originy = chemostatLength + chemostatChannelWidth / 2;\n\n // 34\n ports.push(new ComponentPort(originx - 0.3 * controlSpacing, 2 * chemostatLength, \"38\", LogicalLayerType.CONTROL));\n // 35\n ports.push(new ComponentPort(originx + 0.5 * controlSpacing, 2 * chemostatLength, \"49\", LogicalLayerType.CONTROL));\n // 36\n ports.push(new ComponentPort(originx + 0.4 * controlSpacing + 0.3 * controlSpacing, 2 * chemostatLength, \"40\", LogicalLayerType.CONTROL));\n return ports;\n }\n\n render2D(params: { [k: string]: any }, key: string) {\n if (key === \"FLOW\") {\n return this.__drawFlow(params);\n } else if (key === \"CONTROL\") {\n return this.__drawControl(params);\n }\n else{\n throw new Error(\"Unknown key for computing chemostat ring: \" + key);\n }\n }\n\n __drawFlow(params: { [k: string]: any }) {\n const x = params.position[0];\n const y = params.position[1];\n const flowChannelWidth = params.flowChannelWidth;\n const controlChannelWidth = params.controlChannelWidth;\n const chemostatChannelWidth = params.chemostatChannelWidth;\n const volume = params.volume;\n const height = params.height;\n const radius = params.radius;\n const rotation = params.rotation;\n const color = params.color;\n const serp = new paper.CompoundPath(\"\");\n\n const area = volume / height;\n const chemostatLength = area / (4 * chemostatChannelWidth);\n\n /// / chemostat ring\n\n // chemostat ring top\n let topLeft = new paper.Point(x + chemostatChannelWidth, y);\n let bottomRight = new paper.Point(x + chemostatChannelWidth + chemostatLength, y + chemostatChannelWidth);\n serp.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n // chemostat ring right\n topLeft = new paper.Point(x + chemostatLength, y + chemostatChannelWidth);\n bottomRight = new paper.Point(x + chemostatChannelWidth + chemostatLength, y + chemostatChannelWidth + chemostatLength);\n serp.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n // chemostat ring bottom\n topLeft = new paper.Point(x, y + chemostatLength);\n bottomRight = new paper.Point(x + chemostatLength, y + chemostatLength + chemostatChannelWidth);\n serp.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n // chemostat ring left\n topLeft = new paper.Point(x, y);\n bottomRight = new paper.Point(x + chemostatChannelWidth, y + chemostatLength);\n serp.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n // in top left vert\n topLeft = new paper.Point(x + chemostatChannelWidth / 2 + chemostatLength / 4 - flowChannelWidth / 2, y + chemostatChannelWidth / 2);\n bottomRight = new paper.Point(x + chemostatChannelWidth / 2 + chemostatLength / 4 + flowChannelWidth / 2, y + chemostatChannelWidth / 2 + (2 * chemostatLength) / 5);\n serp.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n // in top right vert\n topLeft = new paper.Point(x + chemostatChannelWidth / 2 + (3 * chemostatLength) / 5 - flowChannelWidth / 2, y + chemostatChannelWidth / 2);\n bottomRight = new paper.Point(x + chemostatChannelWidth / 2 + (3 * chemostatLength) / 5 + flowChannelWidth / 2, y + chemostatChannelWidth / 2 + (2 * chemostatLength) / 5);\n serp.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n // in top right hori\n topLeft = new paper.Point(x + chemostatChannelWidth / 2 + (3 * chemostatLength) / 5, y + chemostatChannelWidth / 2 + chemostatLength / 5 - flowChannelWidth / 2);\n bottomRight = new paper.Point(x + chemostatChannelWidth / 2 + chemostatLength, y + chemostatChannelWidth / 2 + chemostatLength / 5 + flowChannelWidth / 2);\n serp.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n // in top bottom hori\n topLeft = new paper.Point(x + chemostatChannelWidth / 2, y + chemostatChannelWidth / 2 + (2 * chemostatLength) / 5 - flowChannelWidth / 2);\n bottomRight = new paper.Point(x + chemostatChannelWidth / 2 + (3 * chemostatLength) / 5, y + chemostatChannelWidth / 2 + (2 * chemostatLength) / 5 + flowChannelWidth / 2);\n serp.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n // in middle left hori\n topLeft = new paper.Point(x + chemostatChannelWidth / 2, y + chemostatChannelWidth / 2 + (4 * chemostatLength) / 5 - flowChannelWidth / 2);\n bottomRight = new paper.Point(x + chemostatChannelWidth / 2 + chemostatLength / 4, y + chemostatChannelWidth / 2 + (4 * chemostatLength) / 5 + flowChannelWidth / 2);\n serp.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n // in middle middle vert\n topLeft = new paper.Point(x + chemostatChannelWidth / 2 + chemostatLength / 4 - flowChannelWidth / 2, y + chemostatChannelWidth / 2 + chemostatLength / 2);\n bottomRight = new paper.Point(\n x + chemostatChannelWidth / 2 + chemostatLength / 4 + flowChannelWidth / 2,\n y + chemostatChannelWidth / 2 + (4 * chemostatLength) / 5 + flowChannelWidth / 2\n );\n serp.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n // in middle middle hori\n topLeft = new paper.Point(\n x + chemostatChannelWidth / 2 + chemostatLength / 4 - flowChannelWidth / 2,\n y + chemostatChannelWidth / 2 + chemostatLength / 2 - flowChannelWidth / 2\n );\n bottomRight = new paper.Point(x + chemostatChannelWidth / 2 + (5 * chemostatLength) / 7, y + chemostatChannelWidth / 2 + chemostatLength / 2 + flowChannelWidth / 2);\n serp.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n // in top circle\n let center = new paper.Point(x + chemostatChannelWidth / 2 + (5 * chemostatLength) / 7, y + chemostatChannelWidth / 2 + chemostatLength / 2);\n const circ = new paper.Path.Circle(center, radius);\n serp.addChild(circ);\n\n // calc H\n const xval = Math.abs((5 * chemostatLength) / 7 - (3 * chemostatLength) / 5);\n const yval = Math.abs(chemostatChannelWidth / 2 + chemostatLength / 2 - (chemostatChannelWidth / 2 + (2 * chemostatLength) / 5));\n const hval = Math.sqrt(Math.pow(xval, 2) + Math.pow(yval, 2));\n const angt = (Math.asin(yval / hval) * 180) / Math.PI;\n\n // in tilt\n topLeft = new paper.Point(\n x + chemostatChannelWidth / 2 + (3 * chemostatLength) / 5 - flowChannelWidth / 2,\n y + chemostatChannelWidth / 2 + (2 * chemostatLength) / 5 - flowChannelWidth / 2\n );\n bottomRight = new paper.Point(\n x + chemostatChannelWidth / 2 + (3 * chemostatLength) / 5 - flowChannelWidth / 2 + hval,\n y + chemostatChannelWidth / 2 + (2 * chemostatLength) / 5 + flowChannelWidth / 2\n );\n serp.addChild(\n (new paper.Path.Rectangle(topLeft, bottomRight).rotate(\n angt,\n new paper.Point(x + chemostatChannelWidth / 2 + (3 * chemostatLength) / 5, y + chemostatChannelWidth / 2 + (2 * chemostatLength) / 5)\n ) as unknown) as paper.Path.Rectangle\n );\n\n // in circle bottom vert\n topLeft = new paper.Point(x + chemostatChannelWidth / 2 + (5 * chemostatLength) / 7 - flowChannelWidth / 2, y + chemostatChannelWidth / 2 + chemostatLength / 2);\n bottomRight = new paper.Point(x + chemostatChannelWidth / 2 + (5 * chemostatLength) / 7 + flowChannelWidth / 2, y + chemostatChannelWidth / 2 + (7 * chemostatLength) / 11);\n serp.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n // in circle bottom hori\n topLeft = new paper.Point(\n x + chemostatChannelWidth / 2 + (5 * chemostatLength) / 7 - flowChannelWidth / 2,\n y + chemostatChannelWidth / 2 + (7 * chemostatLength) / 11 - flowChannelWidth / 2\n );\n bottomRight = new paper.Point(x + chemostatLength, y + chemostatChannelWidth / 2 + (7 * chemostatLength) / 11 + flowChannelWidth / 2);\n serp.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n // in bottom right vert\n topLeft = new paper.Point(x + (5 * chemostatLength) / 6 - flowChannelWidth / 2, y + chemostatChannelWidth / 2 + (7 * chemostatLength) / 11);\n bottomRight = new paper.Point(x + (5 * chemostatLength) / 6 + flowChannelWidth / 2, y + chemostatChannelWidth / 2 + chemostatLength);\n serp.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n // in bottom middle vert\n topLeft = new paper.Point(x + chemostatChannelWidth / 2 + (3 * chemostatLength) / 7 - flowChannelWidth / 2, y + chemostatChannelWidth / 2 + (4 * chemostatLength) / 6);\n bottomRight = new paper.Point(x + chemostatChannelWidth / 2 + (3 * chemostatLength) / 7 + flowChannelWidth / 2, y + chemostatChannelWidth / 2 + chemostatLength);\n serp.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n // in bottom circle\n center = new paper.Point(x + chemostatChannelWidth / 2 + (3 * chemostatLength) / 7, y + chemostatChannelWidth / 2 + (4 * chemostatLength) / 6);\n serp.addChild(new paper.Path.Circle(center, radius));\n\n /// / stuff outside the ring\n\n // left top hori\n topLeft = new paper.Point(x - chemostatLength / 3, y + chemostatLength / 5 - flowChannelWidth / 2);\n bottomRight = new paper.Point(x, y + chemostatLength / 5 + flowChannelWidth / 2);\n serp.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n // left top vert\n topLeft = new paper.Point(x - chemostatLength / 3 - flowChannelWidth / 2, y - chemostatLength / 3);\n bottomRight = new paper.Point(x - chemostatLength / 3 + flowChannelWidth / 2, y + chemostatLength / 5 + flowChannelWidth / 2);\n serp.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n // left flow port hori bar\n topLeft = new paper.Point(x - chemostatLength / 3 - chemostatLength / 2, y - chemostatLength / 3 - flowChannelWidth / 2);\n bottomRight = new paper.Point(x - chemostatLength / 3 + chemostatLength / 2, y - chemostatLength / 3 + flowChannelWidth / 2);\n serp.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n // horizontal circles\n // left\n // center = new paper.Point(x - chemostatLength/3 - chemostatLength/2, y - chemostatLength/3);\n // serp.addChild(new paper.Path.Circle(center, radius));\n // right\n // center = new paper.Point(x - chemostatLength/3 + chemostatLength/2, y - chemostatLength/3);\n // serp.addChild(new paper.Path.Circle(center, radius));\n\n // left flow port vert\n topLeft = new paper.Point(x - chemostatLength / 3 - chemostatLength / 5 - flowChannelWidth / 2, y - chemostatLength / 3 - chemostatLength / 3);\n bottomRight = new paper.Point(x - chemostatLength / 3 - chemostatLength / 5 + flowChannelWidth / 2, y - chemostatLength / 3);\n serp.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n // right flow port vert\n topLeft = new paper.Point(x - chemostatLength / 3 + chemostatLength / 5 - flowChannelWidth / 2, y - chemostatLength / 3 - chemostatLength / 3);\n bottomRight = new paper.Point(x - chemostatLength / 3 + chemostatLength / 5 + flowChannelWidth / 2, y - chemostatLength / 3);\n serp.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n // top circles\n // left\n // center = new paper.Point(x - chemostatLength/3 - chemostatLength/5, y - chemostatLength/3 - chemostatLength/3);\n // serp.addChild(new paper.Path.Circle(center, radius));\n\n // right\n // center = new paper.Point(x - chemostatLength/3 + chemostatLength/5, y - chemostatLength/3 - chemostatLength/3);\n // serp.addChild(new paper.Path.Circle(center, radius));\n\n // left vert line that goes to bottom\n topLeft = new paper.Point(x - chemostatLength / 5 - flowChannelWidth / 2, y + chemostatLength / 5);\n bottomRight = new paper.Point(x - chemostatLength / 5 + flowChannelWidth / 2, y + chemostatLength + chemostatChannelWidth + chemostatLength / 5);\n serp.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n // left middle hori\n topLeft = new paper.Point(x - chemostatLength / 5, y + chemostatLength / 5 + chemostatLength / 2 - flowChannelWidth / 2);\n bottomRight = new paper.Point(x, y + chemostatLength / 5 + chemostatLength / 2 + flowChannelWidth / 2);\n serp.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n // bottom hori\n topLeft = new paper.Point(x - chemostatLength / 5 - flowChannelWidth / 2, y + chemostatLength + chemostatChannelWidth + chemostatLength / 5 - flowChannelWidth / 2);\n bottomRight = new paper.Point(\n x + chemostatChannelWidth / 2 + (3 * chemostatLength) / 5,\n y + chemostatLength + chemostatChannelWidth + chemostatLength / 5 + flowChannelWidth / 2\n );\n serp.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n // bottom left vert\n topLeft = new paper.Point(x + chemostatChannelWidth / 2 + chemostatLength / 4 - flowChannelWidth / 2, y + chemostatLength + chemostatChannelWidth / 2);\n bottomRight = new paper.Point(\n x + chemostatChannelWidth / 2 + chemostatLength / 4 + flowChannelWidth / 2,\n y + chemostatLength + chemostatChannelWidth + chemostatLength / 5\n );\n serp.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n // bottom middle vert\n topLeft = new paper.Point(x + chemostatChannelWidth / 2 + (3 * chemostatLength) / 5 - flowChannelWidth / 2, y + chemostatLength + chemostatChannelWidth / 2);\n bottomRight = new paper.Point(\n x + chemostatChannelWidth / 2 + (3 * chemostatLength) / 5 + flowChannelWidth / 2,\n y + chemostatLength + chemostatChannelWidth + (2 * chemostatLength) / 5\n );\n serp.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n // bottom right hori\n topLeft = new paper.Point(\n x + chemostatChannelWidth / 2 + (3 * chemostatLength) / 5 - flowChannelWidth / 2,\n y + chemostatLength + chemostatChannelWidth + (2 * chemostatLength) / 5 - flowChannelWidth / 2\n );\n bottomRight = new paper.Point(\n x + chemostatChannelWidth + chemostatLength + (2 * chemostatLength) / 5,\n y + chemostatLength + chemostatChannelWidth + (2 * chemostatLength) / 5 + flowChannelWidth / 2\n );\n serp.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n // right bottom vert\n topLeft = new paper.Point(\n x + chemostatChannelWidth + chemostatLength + (2 * chemostatLength) / 5 - flowChannelWidth / 2,\n y + chemostatChannelWidth / 2 + (7 * chemostatLength) / 11\n );\n bottomRight = new paper.Point(\n x + chemostatChannelWidth + chemostatLength + (2 * chemostatLength) / 5 + flowChannelWidth / 2,\n y + chemostatLength + chemostatChannelWidth + (2 * chemostatLength) / 5 + flowChannelWidth / 2\n );\n serp.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n center = new paper.Point(x + chemostatChannelWidth + chemostatLength + (2 * chemostatLength) / 5, y + chemostatChannelWidth / 2 + (7 * chemostatLength) / 11 - radius);\n serp.addChild(new paper.Path.Circle(center, radius));\n\n // right bottom hori\n topLeft = new paper.Point(\n x + chemostatChannelWidth + chemostatLength + chemostatLength / 5,\n y + chemostatLength + chemostatChannelWidth + chemostatLength / 5 - flowChannelWidth / 2\n );\n bottomRight = new paper.Point(\n x + chemostatChannelWidth + chemostatLength + (2 * chemostatLength) / 5,\n y + chemostatLength + chemostatChannelWidth + chemostatLength / 5 + flowChannelWidth / 2\n );\n serp.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n // right vert that goes to top\n topLeft = new paper.Point(x + chemostatChannelWidth + chemostatLength + chemostatLength / 5 - flowChannelWidth / 2, y - chemostatLength / 5);\n bottomRight = new paper.Point(\n x + chemostatChannelWidth + chemostatLength + chemostatLength / 5 + flowChannelWidth / 2,\n y + chemostatLength + chemostatChannelWidth + chemostatLength / 5 + flowChannelWidth / 2\n );\n serp.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n // right middle hori\n topLeft = new paper.Point(x + chemostatChannelWidth / 2 + chemostatLength, y + chemostatChannelWidth / 2 + (4 * chemostatLength) / 5 - flowChannelWidth / 2);\n bottomRight = new paper.Point(\n x + chemostatChannelWidth + chemostatLength + chemostatLength / 5,\n y + chemostatChannelWidth / 2 + (4 * chemostatLength) / 5 + flowChannelWidth / 2\n );\n serp.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n // right top hori\n topLeft = new paper.Point(x + chemostatChannelWidth / 2 + chemostatLength, y + chemostatChannelWidth / 2 + (2 * chemostatLength) / 5 - flowChannelWidth / 2);\n bottomRight = new paper.Point(\n x + chemostatChannelWidth + chemostatLength + chemostatLength / 5,\n y + chemostatChannelWidth / 2 + (2 * chemostatLength) / 5 + flowChannelWidth / 2\n );\n serp.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n // top hori\n topLeft = new paper.Point(x + chemostatChannelWidth / 2 + (3 * chemostatLength) / 7, y - chemostatLength / 5 - flowChannelWidth / 2);\n bottomRight = new paper.Point(x + chemostatChannelWidth + chemostatLength + chemostatLength / 5 + flowChannelWidth / 2, y - chemostatLength / 5 + flowChannelWidth / 2);\n serp.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n // top left vert\n topLeft = new paper.Point(x + chemostatChannelWidth / 2 + (3 * chemostatLength) / 7 - flowChannelWidth / 2, y - chemostatLength / 5 - flowChannelWidth / 2);\n bottomRight = new paper.Point(x + chemostatChannelWidth / 2 + (3 * chemostatLength) / 7 + flowChannelWidth / 2, y);\n serp.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n // top right vert\n topLeft = new paper.Point(x + (5 * chemostatLength) / 6 - flowChannelWidth / 2, y - chemostatLength / 5);\n bottomRight = new paper.Point(x + (5 * chemostatLength) / 6 + flowChannelWidth / 2, y);\n serp.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n serp.rotate(rotation, new paper.Point(x, y));\n serp.fillColor = color;\n return serp;\n }\n\n __drawControl(params: { [k: string]: any }) {\n const x = params.position[0];\n const y = params.position[1];\n const flowChannelWidth = params.flowChannelWidth;\n const controlChannelWidth = params.controlChannelWidth;\n const chemostatChannelWidth = params.chemostatChannelWidth;\n const volume = params.volume;\n const height = params.height;\n const radius = params.radius;\n const rotation = params.rotation;\n const color = params.color;\n\n const area = volume / height;\n const chemostatLength = area / (4 * chemostatChannelWidth);\n\n const control = new paper.CompoundPath(\"\");\n\n const valvelength = 1.5 * chemostatChannelWidth;\n const valvewidth = 2 * controlChannelWidth;\n const controlSpacing = chemostatLength / 10;\n\n const controlendpoint = (-7 * chemostatLength) / 8;\n const bendDist = chemostatLength / 15;\n\n // 1\n let topLeft = new paper.Point(x - chemostatLength / 3 - chemostatLength / 5 - controlChannelWidth / 2 - controlSpacing - radius, y + controlendpoint);\n let bottomRight = new paper.Point(x - chemostatLength / 3 - chemostatLength / 5 + controlChannelWidth / 2 - controlSpacing - radius, y - chemostatLength / 3 - bendDist);\n control.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n topLeft = new paper.Point(\n x - chemostatLength / 3 - chemostatLength / 5 - controlChannelWidth / 2 - controlSpacing - radius,\n y - chemostatLength / 3 - bendDist - controlChannelWidth / 2\n );\n bottomRight = new paper.Point(x - chemostatLength / 3 - chemostatLength / 5 - controlSpacing, y - chemostatLength / 3 - bendDist + controlChannelWidth / 2);\n control.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n topLeft = new paper.Point(\n x - chemostatLength / 3 - chemostatLength / 5 - controlSpacing - controlChannelWidth / 2,\n y - chemostatLength / 3 - bendDist - controlChannelWidth / 2\n );\n bottomRight = new paper.Point(x - chemostatLength / 3 - chemostatLength / 5 - controlSpacing + controlChannelWidth / 2, y - chemostatLength / 3);\n control.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n topLeft = new paper.Point(x - chemostatLength / 3 - chemostatLength / 5 - controlSpacing - valvewidth / 2, y - chemostatLength / 3 - valvelength / 2);\n bottomRight = new paper.Point(x - chemostatLength / 3 - chemostatLength / 5 - controlSpacing + valvewidth / 2, y - chemostatLength / 3 + valvelength / 2);\n control.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n // 2\n topLeft = new paper.Point(x - chemostatLength / 3 - chemostatLength / 5 - valvelength / 2, y - chemostatLength / 3 - controlSpacing - valvewidth / 2);\n bottomRight = new paper.Point(x - chemostatLength / 3 - chemostatLength / 5 + valvelength / 2, y - chemostatLength / 3 - controlSpacing + valvewidth / 2);\n control.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n topLeft = new paper.Point(x - chemostatLength / 3 - chemostatLength / 5, y - chemostatLength / 3 - controlSpacing - controlChannelWidth / 2);\n bottomRight = new paper.Point(x - chemostatLength / 3 - chemostatLength / 5 + 1.3 * radius, y - chemostatLength / 3 - controlSpacing + controlChannelWidth / 2);\n control.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n topLeft = new paper.Point(x - chemostatLength / 3 - chemostatLength / 5 + 1.3 * radius - controlChannelWidth / 2, y + controlendpoint);\n bottomRight = new paper.Point(\n x - chemostatLength / 3 - chemostatLength / 5 + 1.3 * radius + controlChannelWidth / 2,\n y - chemostatLength / 3 - controlSpacing + controlChannelWidth / 2\n );\n control.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n // 3\n topLeft = new paper.Point(x - chemostatLength / 3 - chemostatLength / 5 + controlSpacing - valvewidth / 2, y - chemostatLength / 3 - valvelength / 2);\n bottomRight = new paper.Point(x - chemostatLength / 3 - chemostatLength / 5 + controlSpacing + valvewidth / 2, y - chemostatLength / 3 + valvelength / 2);\n control.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n topLeft = new paper.Point(x - chemostatLength / 3 - chemostatLength / 5 + controlSpacing - controlChannelWidth / 2, y - chemostatLength / 3 - bendDist);\n bottomRight = new paper.Point(x - chemostatLength / 3 - chemostatLength / 5 + controlSpacing + controlChannelWidth / 2, y - chemostatLength / 3);\n control.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n topLeft = new paper.Point(\n x - chemostatLength / 3 - chemostatLength / 5 + controlSpacing - controlChannelWidth / 2,\n y - chemostatLength / 3 - bendDist - controlChannelWidth / 2\n );\n bottomRight = new paper.Point(x - chemostatLength / 3 - chemostatLength / 5 + 1.7 * radius, y - chemostatLength / 3 - bendDist + controlChannelWidth / 2);\n control.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n topLeft = new paper.Point(x - chemostatLength / 3 - chemostatLength / 5 + 1.7 * radius - controlChannelWidth / 2, y + controlendpoint);\n bottomRight = new paper.Point(\n x - chemostatLength / 3 - chemostatLength / 5 + 1.7 * radius + controlChannelWidth / 2,\n y - chemostatLength / 3 - bendDist + controlChannelWidth / 2\n );\n control.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n // 4\n topLeft = new paper.Point(x - chemostatLength / 3 + chemostatLength / 5 - controlChannelWidth / 2 - controlSpacing - radius, y + controlendpoint);\n bottomRight = new paper.Point(x - chemostatLength / 3 + chemostatLength / 5 + controlChannelWidth / 2 - controlSpacing - radius, y - chemostatLength / 3 - bendDist);\n control.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n topLeft = new paper.Point(\n x - chemostatLength / 3 + chemostatLength / 5 - controlChannelWidth / 2 - controlSpacing - radius,\n y - chemostatLength / 3 - bendDist - controlChannelWidth / 2\n );\n bottomRight = new paper.Point(x - chemostatLength / 3 + chemostatLength / 5 - controlSpacing, y - chemostatLength / 3 - bendDist + controlChannelWidth / 2);\n control.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n topLeft = new paper.Point(\n x - chemostatLength / 3 + chemostatLength / 5 - controlSpacing - controlChannelWidth / 2,\n y - chemostatLength / 3 - bendDist - controlChannelWidth / 2\n );\n bottomRight = new paper.Point(x - chemostatLength / 3 + chemostatLength / 5 - controlSpacing + controlChannelWidth / 2, y - chemostatLength / 3);\n control.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n topLeft = new paper.Point(x - chemostatLength / 3 + chemostatLength / 5 - controlSpacing - valvewidth / 2, y - chemostatLength / 3 - valvelength / 2);\n bottomRight = new paper.Point(x - chemostatLength / 3 + chemostatLength / 5 - controlSpacing + valvewidth / 2, y - chemostatLength / 3 + valvelength / 2);\n control.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n // 5\n topLeft = new paper.Point(x - chemostatLength / 3 + chemostatLength / 5 - valvelength / 2, y - chemostatLength / 3 - controlSpacing - valvewidth / 2);\n bottomRight = new paper.Point(x - chemostatLength / 3 + chemostatLength / 5 + valvelength / 2, y - chemostatLength / 3 - controlSpacing + valvewidth / 2);\n control.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n topLeft = new paper.Point(x - chemostatLength / 3 + chemostatLength / 5, y - chemostatLength / 3 - controlSpacing - controlChannelWidth / 2);\n bottomRight = new paper.Point(x - chemostatLength / 3 + chemostatLength / 5 + 1.3 * radius, y - chemostatLength / 3 - controlSpacing + controlChannelWidth / 2);\n control.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n topLeft = new paper.Point(x - chemostatLength / 3 + chemostatLength / 5 + 1.3 * radius - controlChannelWidth / 2, y + controlendpoint);\n bottomRight = new paper.Point(\n x - chemostatLength / 3 + chemostatLength / 5 + 1.3 * radius + controlChannelWidth / 2,\n y - chemostatLength / 3 - controlSpacing + controlChannelWidth / 2\n );\n control.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n // 6\n topLeft = new paper.Point(x - chemostatLength / 3 + chemostatLength / 5 + controlSpacing - valvewidth / 2, y - chemostatLength / 3 - valvelength / 2);\n bottomRight = new paper.Point(x - chemostatLength / 3 + chemostatLength / 5 + controlSpacing + valvewidth / 2, y - chemostatLength / 3 + valvelength / 2);\n control.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n topLeft = new paper.Point(x - chemostatLength / 3 + chemostatLength / 5 + controlSpacing - controlChannelWidth / 2, y - chemostatLength / 3 - bendDist);\n bottomRight = new paper.Point(x - chemostatLength / 3 + chemostatLength / 5 + controlSpacing + controlChannelWidth / 2, y - chemostatLength / 3);\n control.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n topLeft = new paper.Point(\n x - chemostatLength / 3 + chemostatLength / 5 + controlSpacing - controlChannelWidth / 2,\n y - chemostatLength / 3 - bendDist - controlChannelWidth / 2\n );\n bottomRight = new paper.Point(x - chemostatLength / 3 + chemostatLength / 5 + 1.7 * radius, y - chemostatLength / 3 - bendDist + controlChannelWidth / 2);\n control.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n topLeft = new paper.Point(x - chemostatLength / 3 + chemostatLength / 5 + 1.7 * radius - controlChannelWidth / 2, y + controlendpoint);\n bottomRight = new paper.Point(\n x - chemostatLength / 3 + chemostatLength / 5 + 1.7 * radius + controlChannelWidth / 2,\n y - chemostatLength / 3 - bendDist + controlChannelWidth / 2\n );\n control.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n // top left vert\n let originx = chemostatChannelWidth / 2 + (3 * chemostatLength) / 7;\n let originy = chemostatChannelWidth / 2;\n // 7\n topLeft = new paper.Point(x + originx - controlChannelWidth / 2 - controlSpacing - 0.5 * radius, y + controlendpoint);\n bottomRight = new paper.Point(x + originx + controlChannelWidth / 2 - controlSpacing - 0.5 * radius, y + originy - bendDist);\n control.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n topLeft = new paper.Point(x + originx - controlChannelWidth / 2 - controlSpacing - 0.5 * radius, y + originy - bendDist - controlChannelWidth / 2);\n bottomRight = new paper.Point(x + originx - controlSpacing, y + originy - bendDist + controlChannelWidth / 2);\n control.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n topLeft = new paper.Point(x + originx - controlSpacing - controlChannelWidth / 2, y + originy - bendDist - controlChannelWidth / 2);\n bottomRight = new paper.Point(x + originx - controlSpacing + controlChannelWidth / 2, y + originy);\n control.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n topLeft = new paper.Point(x + originx - controlSpacing - valvewidth / 2, y + originy - valvelength / 2);\n bottomRight = new paper.Point(x + originx - controlSpacing + valvewidth / 2, y + originy + valvelength / 2);\n control.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n // 8\n topLeft = new paper.Point(x + originx - valvelength / 2, y + originy - controlSpacing - valvewidth / 2);\n bottomRight = new paper.Point(x + originx + valvelength / 2, y + originy - controlSpacing + valvewidth / 2);\n control.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n topLeft = new paper.Point(x + originx, y + originy - controlSpacing - controlChannelWidth / 2);\n bottomRight = new paper.Point(x + originx + 1.3 * radius, y + originy - controlSpacing + controlChannelWidth / 2);\n control.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n topLeft = new paper.Point(x + originx + 1.3 * radius - controlChannelWidth / 2, y + controlendpoint);\n bottomRight = new paper.Point(x + originx + 1.3 * radius + controlChannelWidth / 2, y + originy - controlSpacing + controlChannelWidth / 2);\n control.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n // 9\n topLeft = new paper.Point(x + originx + controlSpacing - valvewidth / 2, y + originy - valvelength / 2);\n bottomRight = new paper.Point(x + originx + controlSpacing + valvewidth / 2, y + originy + valvelength / 2);\n control.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n topLeft = new paper.Point(x + originx + controlSpacing - controlChannelWidth / 2, y + originy - bendDist);\n bottomRight = new paper.Point(x + originx + controlSpacing + controlChannelWidth / 2, y + originy);\n control.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n topLeft = new paper.Point(x + originx + controlSpacing - controlChannelWidth / 2, y + originy - bendDist - controlChannelWidth / 2);\n bottomRight = new paper.Point(x + originx + 1.7 * radius, y + originy - bendDist + controlChannelWidth / 2);\n control.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n topLeft = new paper.Point(x + originx + 1.7 * radius - controlChannelWidth / 2, y + controlendpoint);\n bottomRight = new paper.Point(x + originx + 1.7 * radius + controlChannelWidth / 2, y + originy - bendDist + controlChannelWidth / 2);\n control.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n // top right vert\n originx = (5 * chemostatLength) / 6;\n originy = chemostatChannelWidth / 2;\n // 10\n topLeft = new paper.Point(x + originx - controlChannelWidth / 2 - controlSpacing - 0.5 * radius, y + controlendpoint);\n bottomRight = new paper.Point(x + originx + controlChannelWidth / 2 - controlSpacing - 0.5 * radius, y + originy - bendDist);\n control.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n topLeft = new paper.Point(x + originx - controlChannelWidth / 2 - controlSpacing - 0.5 * radius, y + originy - bendDist - controlChannelWidth / 2);\n bottomRight = new paper.Point(x + originx - controlSpacing, y + originy - bendDist + controlChannelWidth / 2);\n control.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n topLeft = new paper.Point(x + originx - controlSpacing - controlChannelWidth / 2, y + originy - bendDist - controlChannelWidth / 2);\n bottomRight = new paper.Point(x + originx - controlSpacing + controlChannelWidth / 2, y + originy);\n control.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n topLeft = new paper.Point(x + originx - controlSpacing - valvewidth / 2, y + originy - valvelength / 2);\n bottomRight = new paper.Point(x + originx - controlSpacing + valvewidth / 2, y + originy + valvelength / 2);\n control.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n // 11\n topLeft = new paper.Point(x + originx - valvelength / 2, y + originy - controlSpacing - valvewidth / 2);\n bottomRight = new paper.Point(x + originx + valvelength / 2, y + originy - controlSpacing + valvewidth / 2);\n control.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n topLeft = new paper.Point(x + originx, y + originy - controlSpacing - controlChannelWidth / 2);\n bottomRight = new paper.Point(x + originx + 1.3 * radius, y + originy - controlSpacing + controlChannelWidth / 2);\n control.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n topLeft = new paper.Point(x + originx + 1.3 * radius - controlChannelWidth / 2, y + controlendpoint);\n bottomRight = new paper.Point(x + originx + 1.3 * radius + controlChannelWidth / 2, y + originy - controlSpacing + controlChannelWidth / 2);\n control.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n // 12\n topLeft = new paper.Point(x + originx + controlSpacing - valvewidth / 2, y + originy - valvelength / 2);\n bottomRight = new paper.Point(x + originx + controlSpacing + valvewidth / 2, y + originy + valvelength / 2);\n control.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n topLeft = new paper.Point(x + originx + controlSpacing - controlChannelWidth / 2, y + originy - bendDist);\n bottomRight = new paper.Point(x + originx + controlSpacing + controlChannelWidth / 2, y + originy);\n control.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n topLeft = new paper.Point(x + originx + controlSpacing - controlChannelWidth / 2, y + originy - bendDist - controlChannelWidth / 2);\n bottomRight = new paper.Point(x + originx + 1.7 * radius, y + originy - bendDist + controlChannelWidth / 2);\n control.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n topLeft = new paper.Point(x + originx + 1.7 * radius - controlChannelWidth / 2, y + controlendpoint);\n bottomRight = new paper.Point(x + originx + 1.7 * radius + controlChannelWidth / 2, y + originy - bendDist + controlChannelWidth / 2);\n control.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n // left top\n originx = chemostatChannelWidth / 2;\n originy = chemostatLength / 5;\n\n // 13\n topLeft = new paper.Point(x + originx - valvelength / 2, y + originy - controlSpacing - valvewidth / 2);\n bottomRight = new paper.Point(x + originx + valvelength / 2, y + originy - controlSpacing + valvewidth / 2);\n control.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n topLeft = new paper.Point(x + originx - bendDist - controlChannelWidth / 2, y + originy - controlSpacing - controlChannelWidth / 2);\n bottomRight = new paper.Point(x + originx, y + originy - controlSpacing + controlChannelWidth / 2);\n control.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n topLeft = new paper.Point(x + originx - bendDist - controlChannelWidth / 2, y + originy - controlChannelWidth / 2 - controlSpacing - 0.5 * radius);\n bottomRight = new paper.Point(x + originx - bendDist + controlChannelWidth / 2, y + originy - controlSpacing);\n control.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n topLeft = new paper.Point(x + controlendpoint, y + originy - controlChannelWidth / 2 - controlSpacing - 0.5 * radius);\n bottomRight = new paper.Point(x + originx - bendDist, y + originy + controlChannelWidth / 2 - controlSpacing - 0.5 * radius);\n control.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n // 14\n topLeft = new paper.Point(x + originx - controlSpacing - valvewidth / 2, y + originy - valvelength / 2);\n bottomRight = new paper.Point(x + originx - controlSpacing + valvewidth / 2, y + originy + valvelength / 2);\n control.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n topLeft = new paper.Point(x + originx - controlSpacing - controlChannelWidth / 2, y + originy);\n bottomRight = new paper.Point(x + originx - controlSpacing + controlChannelWidth / 2, y + originy + 1.3 * radius);\n control.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n topLeft = new paper.Point(x + controlendpoint, y + originy + 1.3 * radius - controlChannelWidth / 2);\n bottomRight = new paper.Point(x + originx - controlSpacing + controlChannelWidth / 2, y + originy + 1.3 * radius + controlChannelWidth / 2);\n control.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n // 15\n topLeft = new paper.Point(x + originx - valvelength / 2, y + originy + controlSpacing - valvewidth / 2);\n bottomRight = new paper.Point(x + originx + valvelength / 2, y + originy + controlSpacing + valvewidth / 2);\n control.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n topLeft = new paper.Point(x + originx - bendDist, y + originy + controlSpacing - controlChannelWidth / 2);\n bottomRight = new paper.Point(x + originx, y + originy + controlSpacing + controlChannelWidth / 2);\n control.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n topLeft = new paper.Point(x + originx - bendDist - controlChannelWidth / 2, y + originy + controlSpacing - controlChannelWidth / 2);\n bottomRight = new paper.Point(x + originx - bendDist + controlChannelWidth / 2, y + originy + 1.7 * radius);\n control.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n topLeft = new paper.Point(x + controlendpoint, y + originy + 1.7 * radius - controlChannelWidth / 2);\n bottomRight = new paper.Point(x + originx - bendDist + controlChannelWidth / 2, y + originy + 1.7 * radius + controlChannelWidth / 2);\n control.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n // left bottom\n originx = chemostatChannelWidth / 2;\n originy = chemostatLength / 5 + chemostatLength / 2;\n\n // 16\n topLeft = new paper.Point(x + originx - valvelength / 2, y + originy - controlSpacing - valvewidth / 2);\n bottomRight = new paper.Point(x + originx + valvelength / 2, y + originy - controlSpacing + valvewidth / 2);\n control.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n topLeft = new paper.Point(x + originx - bendDist - controlChannelWidth / 2, y + originy - controlSpacing - controlChannelWidth / 2);\n bottomRight = new paper.Point(x + originx, y + originy - controlSpacing + controlChannelWidth / 2);\n control.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n topLeft = new paper.Point(x + originx - bendDist - controlChannelWidth / 2, y + originy - controlChannelWidth / 2 - controlSpacing - 0.5 * radius);\n bottomRight = new paper.Point(x + originx - bendDist + controlChannelWidth / 2, y + originy - controlSpacing);\n control.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n topLeft = new paper.Point(x + controlendpoint, y + originy - controlChannelWidth / 2 - controlSpacing - 0.5 * radius);\n bottomRight = new paper.Point(x + originx - bendDist, y + originy + controlChannelWidth / 2 - controlSpacing - 0.5 * radius);\n control.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n // 17\n topLeft = new paper.Point(x + originx - controlSpacing - valvewidth / 2, y + originy - valvelength / 2);\n bottomRight = new paper.Point(x + originx - controlSpacing + valvewidth / 2, y + originy + valvelength / 2);\n control.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n topLeft = new paper.Point(x + originx - controlSpacing - controlChannelWidth / 2, y + originy);\n bottomRight = new paper.Point(x + originx - controlSpacing + controlChannelWidth / 2, y + originy + 1.3 * radius);\n control.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n topLeft = new paper.Point(x + controlendpoint, y + originy + 1.3 * radius - controlChannelWidth / 2);\n bottomRight = new paper.Point(x + originx - controlSpacing + controlChannelWidth / 2, y + originy + 1.3 * radius + controlChannelWidth / 2);\n control.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n // 18\n topLeft = new paper.Point(x + originx - valvelength / 2, y + originy + controlSpacing - valvewidth / 2);\n bottomRight = new paper.Point(x + originx + valvelength / 2, y + originy + controlSpacing + valvewidth / 2);\n control.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n topLeft = new paper.Point(x + originx - bendDist, y + originy + controlSpacing - controlChannelWidth / 2);\n bottomRight = new paper.Point(x + originx, y + originy + controlSpacing + controlChannelWidth / 2);\n control.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n topLeft = new paper.Point(x + originx - bendDist - controlChannelWidth / 2, y + originy + controlSpacing - controlChannelWidth / 2);\n bottomRight = new paper.Point(x + originx - bendDist + controlChannelWidth / 2, y + originy + 1.7 * radius);\n control.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n topLeft = new paper.Point(x + controlendpoint, y + originy + 1.7 * radius - controlChannelWidth / 2);\n bottomRight = new paper.Point(x + originx - bendDist + controlChannelWidth / 2, y + originy + 1.7 * radius + controlChannelWidth / 2);\n control.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n // right top\n originx = chemostatChannelWidth / 2 + chemostatLength;\n originy = chemostatChannelWidth / 2 + (2 * chemostatLength) / 5;\n\n // 19\n topLeft = new paper.Point(x + originx - valvelength / 2, y + originy - controlSpacing - valvewidth / 2);\n bottomRight = new paper.Point(x + originx + valvelength / 2, y + originy - controlSpacing + valvewidth / 2);\n control.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n topLeft = new paper.Point(x + originx + bendDist - controlChannelWidth / 2, y + originy - controlSpacing - controlChannelWidth / 2);\n bottomRight = new paper.Point(x + originx, y + originy - controlSpacing + controlChannelWidth / 2);\n control.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n topLeft = new paper.Point(x + originx + bendDist - controlChannelWidth / 2, y + originy - controlChannelWidth / 2 - controlSpacing - 0.5 * radius);\n bottomRight = new paper.Point(x + originx + bendDist + controlChannelWidth / 2, y + originy - controlSpacing + controlChannelWidth / 2);\n control.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n topLeft = new paper.Point(x + 2 * chemostatLength, y + originy - controlChannelWidth / 2 - controlSpacing - 0.5 * radius);\n bottomRight = new paper.Point(x + originx + bendDist, y + originy + controlChannelWidth / 2 - controlSpacing - 0.5 * radius);\n control.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n // 20\n topLeft = new paper.Point(x + originx + controlSpacing - valvewidth / 2, y + originy - valvelength / 2);\n bottomRight = new paper.Point(x + originx + controlSpacing + valvewidth / 2, y + originy + valvelength / 2);\n control.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n topLeft = new paper.Point(x + originx + controlSpacing - controlChannelWidth / 2, y + originy);\n bottomRight = new paper.Point(x + originx + controlSpacing + controlChannelWidth / 2, y + originy + 1.3 * radius);\n control.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n topLeft = new paper.Point(x + 2 * chemostatLength, y + originy + 1.3 * radius - controlChannelWidth / 2);\n bottomRight = new paper.Point(x + originx + controlSpacing - controlChannelWidth / 2, y + originy + 1.3 * radius + controlChannelWidth / 2);\n control.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n // 21\n topLeft = new paper.Point(x + originx - valvelength / 2, y + originy + controlSpacing - valvewidth / 2);\n bottomRight = new paper.Point(x + originx + valvelength / 2, y + originy + controlSpacing + valvewidth / 2);\n control.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n topLeft = new paper.Point(x + originx + bendDist, y + originy + controlSpacing - controlChannelWidth / 2);\n bottomRight = new paper.Point(x + originx, y + originy + controlSpacing + controlChannelWidth / 2);\n control.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n topLeft = new paper.Point(x + originx + bendDist - controlChannelWidth / 2, y + originy + controlSpacing - controlChannelWidth / 2);\n bottomRight = new paper.Point(x + originx + bendDist + controlChannelWidth / 2, y + originy + 1.7 * radius);\n control.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n topLeft = new paper.Point(x + 2 * chemostatLength, y + originy + 1.7 * radius - controlChannelWidth / 2);\n bottomRight = new paper.Point(x + originx + bendDist - controlChannelWidth / 2, y + originy + 1.7 * radius + controlChannelWidth / 2);\n control.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n // right bottom\n originx = chemostatChannelWidth / 2 + chemostatLength;\n originy = chemostatChannelWidth / 2 + (4 * chemostatLength) / 5;\n\n // 22\n topLeft = new paper.Point(x + originx - valvelength / 2, y + originy - controlSpacing - valvewidth / 2);\n bottomRight = new paper.Point(x + originx + valvelength / 2, y + originy - controlSpacing + valvewidth / 2);\n control.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n topLeft = new paper.Point(x + originx + bendDist - controlChannelWidth / 2, y + originy - controlSpacing - controlChannelWidth / 2);\n bottomRight = new paper.Point(x + originx, y + originy - controlSpacing + controlChannelWidth / 2);\n control.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n topLeft = new paper.Point(x + originx + bendDist - controlChannelWidth / 2, y + originy - controlChannelWidth / 2 - controlSpacing - 0.5 * radius);\n bottomRight = new paper.Point(x + originx + bendDist + controlChannelWidth / 2, y + originy - controlSpacing + controlChannelWidth / 2);\n control.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n topLeft = new paper.Point(x + 2 * chemostatLength, y + originy - controlChannelWidth / 2 - controlSpacing - 0.5 * radius);\n bottomRight = new paper.Point(x + originx + bendDist, y + originy + controlChannelWidth / 2 - controlSpacing - 0.5 * radius);\n control.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n // 23\n topLeft = new paper.Point(x + originx + controlSpacing - valvewidth / 2, y + originy - valvelength / 2);\n bottomRight = new paper.Point(x + originx + controlSpacing + valvewidth / 2, y + originy + valvelength / 2);\n control.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n topLeft = new paper.Point(x + originx + controlSpacing - controlChannelWidth / 2, y + originy);\n bottomRight = new paper.Point(x + originx + controlSpacing + controlChannelWidth / 2, y + originy + 1.3 * radius);\n control.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n topLeft = new paper.Point(x + 2 * chemostatLength, y + originy + 1.3 * radius - controlChannelWidth / 2);\n bottomRight = new paper.Point(x + originx + controlSpacing - controlChannelWidth / 2, y + originy + 1.3 * radius + controlChannelWidth / 2);\n control.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n // 24\n topLeft = new paper.Point(x + originx - valvelength / 2, y + originy + controlSpacing - valvewidth / 2);\n bottomRight = new paper.Point(x + originx + valvelength / 2, y + originy + controlSpacing + valvewidth / 2);\n control.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n topLeft = new paper.Point(x + originx + bendDist, y + originy + controlSpacing - controlChannelWidth / 2);\n bottomRight = new paper.Point(x + originx, y + originy + controlSpacing + controlChannelWidth / 2);\n control.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n topLeft = new paper.Point(x + originx + bendDist - controlChannelWidth / 2, y + originy + controlSpacing - controlChannelWidth / 2);\n bottomRight = new paper.Point(x + originx + bendDist + controlChannelWidth / 2, y + originy + 1.7 * radius);\n control.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n topLeft = new paper.Point(x + 2 * chemostatLength, y + originy + 1.7 * radius - controlChannelWidth / 2);\n bottomRight = new paper.Point(x + originx + bendDist - controlChannelWidth / 2, y + originy + 1.7 * radius + controlChannelWidth / 2);\n control.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n // bottom left\n originx = chemostatChannelWidth / 2 + chemostatLength / 4;\n originy = chemostatLength + chemostatChannelWidth / 2;\n\n // 25\n topLeft = new paper.Point(x + originx - 0.3 * controlSpacing - valvewidth / 2, y + originy - valvelength / 2);\n bottomRight = new paper.Point(x + originx - 0.3 * controlSpacing + valvewidth / 2, y + originy + valvelength / 2);\n control.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n topLeft = new paper.Point(x + originx - controlChannelWidth / 2 - 0.3 * controlSpacing, y + originy);\n bottomRight = new paper.Point(x + originx + controlChannelWidth / 2 - 0.3 * controlSpacing, y + 2 * chemostatLength);\n control.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n // 26\n topLeft = new paper.Point(x + originx - valvelength / 2, y + originy + controlSpacing - valvewidth / 2);\n bottomRight = new paper.Point(x + originx + valvelength / 2, y + originy + controlSpacing + valvewidth / 2);\n control.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n topLeft = new paper.Point(x + originx, y + originy + controlSpacing - controlChannelWidth / 2);\n bottomRight = new paper.Point(x + originx + 0.5 * controlSpacing, y + originy + controlSpacing + controlChannelWidth / 2);\n control.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n topLeft = new paper.Point(x + originx + 0.5 * controlSpacing - controlChannelWidth / 2, y + originy + controlSpacing - controlChannelWidth / 2);\n bottomRight = new paper.Point(x + originx + 0.5 * controlSpacing + controlChannelWidth / 2, y + 2 * chemostatLength);\n control.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n // 27\n topLeft = new paper.Point(x + originx + 0.3 * controlSpacing - valvewidth / 2, y + originy - valvelength / 2);\n bottomRight = new paper.Point(x + originx + 0.3 * controlSpacing + valvewidth / 2, y + originy + valvelength / 2);\n control.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n topLeft = new paper.Point(x + originx + 0.3 * controlSpacing - controlChannelWidth / 2, y + originy);\n bottomRight = new paper.Point(x + originx + 0.3 * controlSpacing + controlChannelWidth / 2, y + originy + bendDist);\n control.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n topLeft = new paper.Point(x + originx + 0.3 * controlSpacing - controlChannelWidth / 2, y + originy + bendDist - controlChannelWidth / 2);\n bottomRight = new paper.Point(x + originx + 0.3 * controlSpacing + 0.4 * controlSpacing, y + originy + bendDist + controlChannelWidth / 2);\n control.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n topLeft = new paper.Point(x + originx - controlChannelWidth / 2 + 0.4 * controlSpacing + 0.3 * controlSpacing, y + originy - controlChannelWidth / 2 + bendDist);\n bottomRight = new paper.Point(x + originx + controlChannelWidth / 2 + 0.4 * controlSpacing + 0.3 * controlSpacing, y + 2 * chemostatLength);\n control.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n // bottom middle\n originx = chemostatChannelWidth / 2 + (3 * chemostatLength) / 7;\n originy = chemostatLength + chemostatChannelWidth / 2;\n\n // 28\n topLeft = new paper.Point(x + originx - 0.3 * controlSpacing - valvewidth / 2, y + originy - valvelength / 2);\n bottomRight = new paper.Point(x + originx - 0.3 * controlSpacing + valvewidth / 2, y + originy + valvelength / 2);\n control.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n topLeft = new paper.Point(x + originx - controlChannelWidth / 2 - 0.3 * controlSpacing, y + originy);\n bottomRight = new paper.Point(x + originx + controlChannelWidth / 2 - 0.3 * controlSpacing, y + 2 * chemostatLength);\n control.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n // 29\n topLeft = new paper.Point(x + originx - valvelength / 2, y + originy - controlSpacing - valvewidth / 2);\n bottomRight = new paper.Point(x + originx + valvelength / 2, y + originy - controlSpacing + valvewidth / 2);\n control.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n topLeft = new paper.Point(x + originx, y + originy - controlSpacing - controlChannelWidth / 2);\n bottomRight = new paper.Point(x + originx - 0.5 * controlSpacing, y + originy - controlSpacing + controlChannelWidth / 2);\n control.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n topLeft = new paper.Point(x + originx - 0.5 * controlSpacing - controlChannelWidth / 2, y + originy - controlSpacing - controlChannelWidth / 2);\n bottomRight = new paper.Point(x + originx - 0.5 * controlSpacing + controlChannelWidth / 2, y + 2 * chemostatLength);\n control.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n // 30\n topLeft = new paper.Point(x + originx + 0.3 * controlSpacing - valvewidth / 2, y + originy - valvelength / 2);\n bottomRight = new paper.Point(x + originx + 0.3 * controlSpacing + valvewidth / 2, y + originy + valvelength / 2);\n control.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n topLeft = new paper.Point(x + originx - controlChannelWidth / 2 + 0.3 * controlSpacing, y + originy);\n bottomRight = new paper.Point(x + originx + controlChannelWidth / 2 + 0.3 * controlSpacing, y + 2 * chemostatLength);\n control.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n // 31\n topLeft = new paper.Point(x + originx + 0.55 * controlSpacing - valvewidth / 2, y + originy - valvelength);\n bottomRight = new paper.Point(x + originx + 0.55 * controlSpacing + valvewidth / 2, y + originy + valvelength);\n control.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n topLeft = new paper.Point(x + originx + 0.55 * controlSpacing - controlChannelWidth / 2, y + originy);\n bottomRight = new paper.Point(x + originx + 0.55 * controlSpacing + controlChannelWidth / 2, y + 2 * chemostatLength);\n control.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n // 32\n topLeft = new paper.Point(x + originx + 0.85 * controlSpacing - valvewidth / 2, y + originy - valvelength);\n bottomRight = new paper.Point(x + originx + 0.85 * controlSpacing + valvewidth / 2, y + originy + valvelength);\n control.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n topLeft = new paper.Point(x + originx + 0.85 * controlSpacing - controlChannelWidth / 2, y + originy);\n bottomRight = new paper.Point(x + originx + 0.85 * controlSpacing + controlChannelWidth / 2, y + 2 * chemostatLength);\n control.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n // 33\n topLeft = new paper.Point(x + originx + 1.15 * controlSpacing - valvewidth / 2, y + originy - valvelength);\n bottomRight = new paper.Point(x + originx + 1.15 * controlSpacing + valvewidth / 2, y + originy + valvelength);\n control.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n topLeft = new paper.Point(x + originx + 1.15 * controlSpacing - controlChannelWidth / 2, y + originy);\n bottomRight = new paper.Point(x + originx + 1.15 * controlSpacing + controlChannelWidth / 2, y + 2 * chemostatLength);\n control.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n // bottom right\n originx = chemostatChannelWidth / 2 + (3 * chemostatLength) / 5;\n originy = chemostatLength + chemostatChannelWidth / 2;\n\n // 34\n topLeft = new paper.Point(x + originx - 0.3 * controlSpacing - valvewidth / 2, y + originy - valvelength / 2);\n bottomRight = new paper.Point(x + originx - 0.3 * controlSpacing + valvewidth / 2, y + originy + valvelength / 2);\n control.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n topLeft = new paper.Point(x + originx - controlChannelWidth / 2 - 0.3 * controlSpacing, y + originy);\n bottomRight = new paper.Point(x + originx + controlChannelWidth / 2 - 0.3 * controlSpacing, y + 2 * chemostatLength);\n control.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n // 35\n topLeft = new paper.Point(x + originx - valvelength / 2, y + originy + controlSpacing - valvewidth / 2);\n bottomRight = new paper.Point(x + originx + valvelength / 2, y + originy + controlSpacing + valvewidth / 2);\n control.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n topLeft = new paper.Point(x + originx, y + originy + controlSpacing - controlChannelWidth / 2);\n bottomRight = new paper.Point(x + originx + 0.5 * controlSpacing, y + originy + controlSpacing + controlChannelWidth / 2);\n control.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n topLeft = new paper.Point(x + originx + 0.5 * controlSpacing - controlChannelWidth / 2, y + originy + controlSpacing - controlChannelWidth / 2);\n bottomRight = new paper.Point(x + originx + 0.5 * controlSpacing + controlChannelWidth / 2, y + 2 * chemostatLength);\n control.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n // 36\n topLeft = new paper.Point(x + originx + 0.3 * controlSpacing - valvewidth / 2, y + originy - valvelength / 2);\n bottomRight = new paper.Point(x + originx + 0.3 * controlSpacing + valvewidth / 2, y + originy + valvelength / 2);\n control.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n topLeft = new paper.Point(x + originx + 0.3 * controlSpacing - controlChannelWidth / 2, y + originy);\n bottomRight = new paper.Point(x + originx + 0.3 * controlSpacing + controlChannelWidth / 2, y + originy + bendDist);\n control.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n topLeft = new paper.Point(x + originx + 0.3 * controlSpacing - controlChannelWidth / 2, y + originy + bendDist - controlChannelWidth / 2);\n bottomRight = new paper.Point(x + originx + 0.3 * controlSpacing + 0.4 * controlSpacing, y + originy + bendDist + controlChannelWidth / 2);\n control.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n topLeft = new paper.Point(x + originx - controlChannelWidth / 2 + 0.4 * controlSpacing + 0.3 * controlSpacing, y + originy - controlChannelWidth / 2 + bendDist);\n bottomRight = new paper.Point(x + originx + controlChannelWidth / 2 + 0.4 * controlSpacing + 0.3 * controlSpacing, y + 2 * chemostatLength);\n control.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n control.rotate(rotation, new paper.Point(x, y));\n control.fillColor = color;\n return control;\n }\n\n render2DTarget(key: string | null, params: { [k: string]: any }) {\n const serp = this.__drawFlow(params);\n serp.addChild(this.__drawControl(params));\n\n serp.fillColor!.alpha = 0.5;\n return serp;\n }\n}\n","import Template from \"./template\";\nimport paper from \"paper\";\nimport ComponentPort from \"../core/componentPort\";\nimport { LogicalLayerType } from \"../core/init\";\n\nexport default class Incubation extends Template {\n constructor() {\n super();\n }\n\n __setupDefinitions(): void {\n this.__unique = {\n position: \"Point\"\n };\n\n this.__heritable = {\n componentSpacing: \"Float\",\n rotation: \"Float\",\n channelWidth: \"Float\",\n length: \"Float\",\n width: \"Float\",\n height: \"Float\"\n };\n\n this.__defaults = {\n componentSpacing: 1000,\n rotation: 0,\n channelWidth: 0.8 * 1000,\n width: 1.23 * 1000,\n length: 4.92 * 1000,\n height: 250\n };\n\n this.__units = {\n componentSpacing: \"μm\",\n rotation: \"°\",\n channelWidth: \"μm\",\n length: \"μm\",\n width: \"μm\",\n height: \"μm\"\n };\n\n this.__minimum = {\n componentSpacing: 0,\n rotation: 0,\n channelWidth: 10,\n width: 30,\n length: 120,\n height: 10\n };\n\n this.__maximum = {\n componentSpacing: 10000,\n rotation: 360,\n channelWidth: 2000,\n width: 6000,\n length: 24 * 1000,\n height: 1200\n };\n\n this.__featureParams = {\n componentSpacing: \"componentSpacing\",\n position: \"position\",\n rotation: \"rotation\",\n channelWidth: \"channelWidth\",\n length: \"length\",\n width: \"width\"\n };\n\n this.__targetParams = {\n componentSpacing: \"componentSpacing\",\n channelWidth: \"channelWidth\",\n length: \"length\",\n width: \"width\",\n rotation: \"rotation\"\n };\n\n this.__placementTool = \"componentPositionTool\";\n\n this.__toolParams = {\n position: \"position\"\n };\n\n this.__renderKeys = [\"FLOW\"];\n\n this.__mint = \"INCUBATION\";\n\n this.__zOffsetKeys = {\n FLOW: \"height\"\n };\n\n this.__substrateOffset = {\n FLOW: \"0\"\n };\n }\n\n getPorts(params: { [k: string]: any }) {\n const length = params.length;\n\n const ports = [];\n\n ports.push(new ComponentPort(0, -length / 2, \"1\", LogicalLayerType.FLOW));\n\n ports.push(new ComponentPort(0, length / 2, \"2\", LogicalLayerType.FLOW));\n\n return ports;\n }\n\n render2D(params: { [k: string]: any }, key: string) {\n const position = params.position;\n const px = position[0];\n const py = position[1];\n const cw = params.channelWidth;\n const l = params.length;\n const w = params.width;\n const rotation = params.rotation;\n const color = params.color;\n let p0, p1, p2, p3, p4, p5;\n // if (rotation === \"H\") {\n // p0 = [px - l / 2, py - cw / 2];\n // p1 = [px - l / 2, py + cw / 2];\n // p2 = [px, py + w + cw / 2];\n // p3 = [px + l / 2, py + cw / 2];\n // p4 = [px + l / 2, py - cw / 2];\n // p5 = [px, py - cw / 2 - w];\n // } else {\n p0 = [px - cw / 2, py - l / 2];\n p1 = [px + cw / 2, py - l / 2];\n p2 = [px + w + cw / 2, py];\n p3 = [px + cw / 2, py + l / 2];\n p4 = [px - cw / 2, py + l / 2];\n p5 = [px - cw / 2 - w, py];\n // }\n const hex = new paper.Path();\n hex.add(new paper.Point(p0));\n hex.add(new paper.Point(p1));\n hex.add(new paper.Point(p2));\n hex.add(new paper.Point(p3));\n hex.add(new paper.Point(p4));\n hex.add(new paper.Point(p5));\n hex.closed = true;\n hex.fillColor = color;\n\n hex.rotate(rotation, new paper.Point(px, py));\n\n return hex;\n }\n\n render2DTarget(key: string | null, params: { [k: string]: any }) {\n if (key === null) {\n key = this.__renderKeys[0];\n }\n const render = this.render2D(params, key);\n render.fillColor!.alpha = 0.5;\n return render;\n }\n}\n","import Template from \"./template\";\nimport paper from \"paper\";\nimport ComponentPort from \"../core/componentPort\";\nimport { LogicalLayerType } from \"../core/init\";\n\nexport default class Merger extends Template {\n constructor() {\n super();\n }\n\n __setupDefinitions(): void {\n this.__unique = {\n position: \"Point\"\n };\n\n this.__heritable = {\n componentSpacing: \"Float\",\n rotation: \"Float\",\n height: \"Float\",\n inletWidth: \"Float\",\n inletLength: \"Float\",\n electrodeWidth: \"Float\",\n electrodeLength: \"Float\",\n electrodeDistance: \"Float\",\n outletWidth: \"Float\",\n outletLength: \"Float\",\n chamberHeight: \"Float\",\n chamberLength: \"Float\",\n channelDepth: \"Float\",\n electrodeDepth: \"Float\"\n };\n\n this.__defaults = {\n componentSpacing: 1000,\n rotation: 0,\n height: 250,\n inletWidth: 2 * 1000,\n inletLength: 4 * 1000,\n electrodeWidth: 1000,\n electrodeLength: 5 * 1000,\n electrodeDistance: 1000,\n outletWidth: 2 * 1000,\n outletLength: 4 * 1000,\n chamberHeight: 2.7 * 1000,\n chamberLength: 2 * 1000,\n channelDepth: 1000,\n electrodeDepth: 1000\n };\n\n this.__units = {\n componentSpacing: \"μm\",\n rotation: \"°\",\n height: \"μm\",\n inletWidth: \"μm\",\n inletLength: \"μm\",\n electrodeWidth: \"μm\",\n electrodeLength: \"μm\",\n electrodeDistance: \"μm\",\n outletWidth: \"μm\",\n outletLength: \"μm\",\n chamberHeight: \"μm\",\n chamberLength: \"μm\",\n channelDepth: \"μm\",\n electrodeDepth: \"μm\"\n };\n\n this.__minimum = {\n componentSpacing: 0,\n rotation: 0,\n height: 10,\n inletWidth: 1000,\n inletLength: 1000,\n electrodeWidth: 500,\n electrodeLength: 3 * 1000,\n electrodeDistance: 500,\n outletWidth: 1000,\n outletLength: 1000,\n chamberHeight: 1000,\n chamberLength: 1000,\n channelDepth: 1000,\n electrodeDepth: 1000\n };\n\n this.__maximum = {\n componentSpacing: 10000,\n rotation: 360,\n height: 1200,\n inletWidth: 3 * 1000,\n inletLength: 6 * 1000,\n electrodeWidth: 3 * 1000,\n electrodeLength: 7 * 1000,\n electrodeDistance: 1500,\n outletWidth: 3 * 1000,\n outletLength: 6 * 1000,\n chamberHeight: 4 * 1000,\n chamberLength: 4 * 1000,\n channelDepth: 1000,\n electrodeDepth: 1000\n };\n\n this.__placementTool = \"multilayerPositionTool\";\n\n this.__toolParams = {\n cursorPosition: \"position\"\n };\n\n this.__featureParams = {\n componentSpacing: \"componentSpacing\",\n position: \"position\",\n rotation: \"rotation\",\n inletWidth: \"inletWidth\",\n inletLength: \"inletLength\",\n electrodeWidth: \"electrodeWidth\",\n electrodeLength: \"electrodeLength\",\n electrodeDistance: \"electrodeDistance\",\n outletWidth: \"outletWidth\",\n outletLength: \"outletLength\",\n chamberHeight: \"chamberHeight\",\n chamberLength: \"chamberLength\",\n channelDepth: \"channelDepth\",\n electrodeDepth: \"electrodeDepth\"\n };\n\n this.__targetParams = {\n componentSpacing: \"componentSpacing\",\n rotation: \"rotation\",\n inletWidth: \"inletWidth\",\n inletLength: \"inletLength\",\n electrodeWidth: \"electrodeWidth\",\n electrodeLength: \"electrodeLength\",\n electrodeDistance: \"electrodeDistance\",\n outletWidth: \"outletWidth\",\n outletLength: \"outletLength\",\n chamberHeight: \"chamberHeight\",\n chamberLength: \"chamberLength\",\n channelDepth: \"channelDepth\",\n electrodeDepth: \"electrodeDepth\"\n };\n\n this.__renderKeys = [\"FLOW\", \"INTEGRATION\"];\n\n this.__mint = \"DROPLET MERGER\";\n\n this.__zOffsetKeys = {\n FLOW: \"height\",\n INTEGRATION: \"electrodeDepth\"\n };\n\n this.__substrateOffset = {\n FLOW: \"0\",\n INTEGRATION: \"+1\"\n };\n }\n\n getPorts(params: { [k: string]: any }) {\n const inletLength = params.inletLength;\n const outletLength = params.outletLength;\n const chamberLength = params.chamberLength;\n\n const ports = [];\n\n ports.push(new ComponentPort(0, 0, \"1\", LogicalLayerType.FLOW));\n\n ports.push(new ComponentPort(inletLength + chamberLength + outletLength, 0, \"2\", LogicalLayerType.FLOW));\n\n return ports;\n }\n\n __renderFlow(params: { [k: string]: any }) {\n const rotation = params.rotation;\n const x = params.position[0];\n const y = params.position[1];\n const color = params.color;\n const inletWidth = params.inletWidth;\n const inletLength = params.inletLength;\n const outletWidth = params.outletWidth;\n const outletLength = params.outletLength;\n const chamberHeight = params.chamberHeight;\n const chamberLength = params.chamberLength;\n const channelDepth = params.channelDepth;\n const electrodeDepth = params.electrodeDepth;\n\n const serp = new paper.CompoundPath(\"\");\n\n // inlet\n let topLeft = new paper.Point(x, y - inletWidth / 2);\n let bottomRight = new paper.Point(x + inletLength, y + inletWidth / 2);\n\n serp.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n // merge chamber\n topLeft = new paper.Point(x + inletLength, y - chamberHeight / 2);\n bottomRight = new paper.Point(x + inletLength + chamberLength, y + chamberHeight / 2);\n\n serp.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n // outlet\n topLeft = new paper.Point(x + inletLength + chamberLength, y - outletWidth / 2);\n bottomRight = new paper.Point(x + inletLength + chamberLength + outletLength, y + outletWidth / 2);\n\n serp.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n serp.rotate(rotation, new paper.Point(x, y));\n\n serp.fillColor = color;\n return serp;\n }\n\n __renderIntegrate(params: { [k: string]: any }) {\n const rotation = params.rotation;\n const x = params.position[0];\n const y = params.position[1];\n const color = params.color;\n const inletLength = params.inletLength;\n const electrodeWidth = params.electrodeWidth;\n const electrodeLength = params.electrodeLength;\n const electrodeDistance = params.electrodeDistance;\n const channelDepth = params.channelDepth;\n const electrodeDepth = params.electrodeDepth;\n\n const serp = new paper.CompoundPath(\"\");\n\n // left electrode\n let topLeft = new paper.Point(x + inletLength, y - electrodeLength / 2);\n let bottomRight = new paper.Point(x + inletLength + electrodeWidth, y + electrodeLength / 2);\n\n serp.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n // right electrode\n topLeft = new paper.Point(x + inletLength + electrodeWidth + electrodeDistance, y - electrodeLength / 2);\n bottomRight = new paper.Point(x + inletLength + 2 * electrodeWidth + electrodeDistance, y + electrodeLength / 2);\n\n serp.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n serp.rotate(rotation, new paper.Point(x, y));\n\n serp.fillColor = color;\n return serp;\n }\n\n // render2DTarget(key, params) {\n // const serp = this.render2D(params, key);\n\n // serp.fillColor.alpha = 0.5;\n // return serp;\n // }\n\n render2D(params: { [k: string]: any }, key = \"FLOW\") {\n if (key === \"FLOW\") {\n return this.__renderFlow(params);\n } else if (key === \"INTEGRATION\") {\n return this.__renderIntegrate(params);\n }\n throw new Error(\"Unknown render key found in DROPLET MERGER: \" + key);\n }\n\n render2DTarget(key: string | null, params: { [k: string]: any }) {\n const ret = new paper.CompoundPath(\"\");\n const flow = this.render2D(params, \"FLOW\");\n const integrate = this.render2D(params, \"INTEGRATION\");\n ret.addChild(integrate);\n ret.addChild(flow);\n ret.fillColor = params.color;\n ret.fillColor!.alpha = 0.5;\n return ret;\n }\n}\n","import Template from \"./template\";\nimport paper from \"paper\";\nimport ComponentPort from \"../core/componentPort\";\nimport { LogicalLayerType } from \"../core/init\";\n\nexport default class PicoInjection extends Template {\n constructor() {\n super();\n }\n\n __setupDefinitions(): void {\n this.__unique = {\n position: \"Point\"\n };\n\n this.__heritable = {\n componentSpacing: \"Float\",\n height: \"Float\",\n width: \"Float\",\n injectorWidth: \"Float\",\n injectorLength: \"Float\",\n dropletWidth: \"Float\",\n nozzleWidth: \"Float\",\n nozzleLength: \"Float\",\n electrodeDistance: \"Float\",\n electrodeWidth: \"Float\",\n electrodeLength: \"Float\",\n rotation: \"Float\"\n };\n\n this.__defaults = {\n componentSpacing: 1000,\n height: 250,\n width: 10 * 1000,\n injectorWidth: 2 * 1000,\n injectorLength: 3 * 1000,\n dropletWidth: 0.8 * 1000,\n nozzleWidth: 0.4 * 1000,\n nozzleLength: 0.4 * 1000,\n electrodeDistance: 0.8 * 1000,\n electrodeWidth: 0.8 * 1000,\n electrodeLength: 3 * 1000,\n rotation: 0\n };\n\n this.__units = {\n componentSpacing: \"μm\",\n height: \"μm\",\n width: \"μm\",\n injectorWidth: \"μm\",\n injectorLength: \"μm\",\n dropletWidth: \"μm\",\n nozzleWidth: \"μm\",\n nozzleLength: \"μm\",\n electrodeDistance: \"μm\",\n electrodeWidth: \"μm\",\n electrodeLength: \"μm\",\n rotation: \"°\"\n };\n\n this.__minimum = {\n componentSpacing: 0,\n height: 10,\n width: 5 * 1000,\n injectorWidth: 1000,\n injectorLength: 1000,\n dropletWidth: 100,\n nozzleWidth: 80,\n nozzleLength: 80,\n electrodeDistance: 100,\n electrodeWidth: 100,\n electrodeLength: 1000,\n rotation: 0\n };\n\n this.__maximum = {\n componentSpacing: 10000,\n height: 1200,\n width: 20 * 1000,\n injectorWidth: 4000,\n injectorLength: 5000,\n dropletWidth: 2000,\n nozzleWidth: 1000,\n nozzleLength: 500,\n electrodeDistance: 2000,\n electrodeWidth: 2000,\n electrodeLength: 5000,\n rotation: 360\n };\n\n this.__placementTool = \"multilayerPositionTool\";\n\n this.__toolParams = {\n cursorPosition: \"position\"\n };\n\n this.__featureParams = {\n componentSpacing: \"componentSpacing\",\n position: \"position\",\n width: \"width\",\n injectorWidth: \"injectorWidth\",\n injectorLength: \"injectorLength\",\n dropletWidth: \"dropletWidth\",\n nozzleWidth: \"nozzleWidth\",\n nozzleLength: \"nozzleLength\",\n electrodeDistance: \"electrodeDistance\",\n electrodeWidth: \"electrodeWidth\",\n electrodeLength: \"electrodeLength\",\n rotation: \"rotation\"\n };\n\n this.__targetParams = {\n componentSpacing: \"componentSpacing\",\n width: \"width\",\n injectorWidth: \"injectorWidth\",\n injectorLength: \"injectorLength\",\n dropletWidth: \"dropletWidth\",\n nozzleWidth: \"nozzleWidth\",\n nozzleLength: \"nozzleLength\",\n electrodeDistance: \"electrodeDistance\",\n electrodeWidth: \"electrodeWidth\",\n electrodeLength: \"electrodeLength\",\n rotation: \"rotation\"\n };\n\n this.__renderKeys = [\"FLOW\", \"INTEGRATION\"];\n\n this.__mint = \"PICOINJECTOR\";\n\n this.__zOffsetKeys = {\n FLOW: \"height\",\n INTEGRATION: \"height\"\n };\n\n this.__substrateOffset = {\n FLOW: \"0\",\n INTEGRATION: \"0\"\n };\n }\n\n getPorts(params: { [k: string]: any }) {\n const width = params.width;\n const injectorLength = params.injectorLength;\n const dropletWidth = params.dropletWidth;\n const nozzleLength = params.nozzleLength;\n const electrodeDistance = params.electrodeDistance;\n const electrodeWidth = params.electrodeWidth;\n const electrodeLength = params.electrodeLength;\n\n const ports = [];\n\n // droplet channel\n ports.push(new ComponentPort(-width / 2, 0, \"1\", LogicalLayerType.FLOW));\n ports.push(new ComponentPort(width / 2, 0, \"2\", LogicalLayerType.FLOW));\n\n // injector\n ports.push(new ComponentPort(0, -dropletWidth / 2 - nozzleLength - injectorLength, \"3\", LogicalLayerType.FLOW));\n\n return ports;\n }\n\n __renderFlow(params: { [k: string]: any }) {\n const rotation = params.rotation;\n const x = params.position[0];\n const y = params.position[1];\n const color = params.color;\n const width = params.width;\n const injectorWidth = params.injectorWidth;\n const injectorLength = params.injectorLength;\n const dropletWidth = params.dropletWidth;\n const nozzleWidth = params.nozzleWidth;\n const nozzleLength = params.nozzleLength;\n const serp = new paper.CompoundPath(\"\");\n\n // droplet channel\n let topLeft = new paper.Point(x - width / 2, y - dropletWidth / 2);\n let bottomRight = new paper.Point(x + width / 2, y + dropletWidth / 2);\n\n serp.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n // nozzle\n topLeft = new paper.Point(x - nozzleWidth / 2, y - dropletWidth / 2 - nozzleLength);\n bottomRight = new paper.Point(x + nozzleWidth / 2, y - dropletWidth / 2);\n\n serp.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n // injector\n topLeft = new paper.Point(x - injectorWidth / 2, y - dropletWidth / 2 - nozzleLength - injectorLength);\n bottomRight = new paper.Point(x + injectorWidth / 2, y - dropletWidth / 2 - nozzleLength);\n\n serp.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n serp.rotate(rotation, new paper.Point(x, y));\n\n serp.fillColor = color;\n return serp;\n }\n\n __renderIntegrate(params: { [k: string]: any }) {\n const rotation = params.rotation;\n const x = params.position[0];\n const y = params.position[1];\n const color = params.color;\n const electrodeDistance = params.electrodeDistance;\n const electrodeWidth = params.electrodeWidth;\n const electrodeLength = params.electrodeLength;\n const serp = new paper.CompoundPath(\"\");\n\n // middle electrode\n let topLeft = new paper.Point(x - electrodeWidth / 2, y + electrodeDistance);\n let bottomRight = new paper.Point(x + electrodeWidth / 2, y + electrodeDistance + electrodeLength);\n\n serp.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n // left electrode\n topLeft = new paper.Point(x - electrodeWidth / 2 - 2 * electrodeWidth, y + electrodeDistance);\n bottomRight = new paper.Point(x + electrodeWidth / 2 - 2 * electrodeWidth, y + electrodeDistance + electrodeLength);\n\n serp.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n // right electrode\n topLeft = new paper.Point(x - electrodeWidth / 2 + 2 * electrodeWidth, y + electrodeDistance);\n bottomRight = new paper.Point(x + electrodeWidth / 2 + 2 * electrodeWidth, y + electrodeDistance + electrodeLength);\n\n serp.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n serp.rotate(rotation, new paper.Point(x, y));\n\n serp.fillColor = color;\n return serp;\n }\n\n // render2DTarget(key, params) {\n // const serp = this.render2D(params, key);\n\n // serp.fillColor.alpha = 0.5;\n // return serp;\n // }\n\n render2D(params: { [k: string]: any }, key = \"FLOW\") {\n if (key === \"FLOW\") {\n return this.__renderFlow(params);\n } else if (key === \"INTEGRATION\") {\n return this.__renderIntegrate(params);\n }\n throw new Error(\"Unknown render key found in PICOINJECTOR: \" + key);\n }\n\n render2DTarget(key: string | null, params: { [k: string]: any }) {\n const ret = new paper.CompoundPath(\"\");\n const flow = this.render2D(params, \"FLOW\");\n const integrate = this.render2D(params, \"INTEGRATION\");\n ret.addChild(integrate);\n ret.addChild(flow);\n ret.fillColor = params.color;\n ret.fillColor!.alpha = 0.5;\n return ret;\n }\n}\n","import Template from \"./template\";\nimport paper from \"paper\";\nimport ComponentPort from \"../core/componentPort\";\nimport { LogicalLayerType } from \"../core/init\";\n\nexport default class Sorter extends Template {\n constructor() {\n super();\n }\n\n __setupDefinitions(): void {\n this.__unique = {\n position: \"Point\"\n };\n\n this.__heritable = {\n componentSpacing: \"Float\",\n rotation: \"Float\",\n height: \"Float\",\n inletWidth: \"Float\",\n inletLength: \"Float\",\n electrodeDistance: \"Float\",\n electrodeWidth: \"Float\",\n electrodeLength: \"Float\",\n outletWidth: \"Float\",\n angle: \"Float\",\n wasteWidth: \"Float\",\n outputLength: \"Float\",\n keepWidth: \"Float\",\n pressureWidth: \"Float\",\n pressureSpacing: \"Float\",\n numberofDistributors: \"Float\",\n channelDepth: \"Float\",\n electrodeDepth: \"Float\",\n pressureDepth: \"Float\"\n };\n\n this.__defaults = {\n componentSpacing: 1000,\n rotation: 0,\n height: 250,\n inletWidth: 0.8 * 1000,\n inletLength: 4 * 1000,\n electrodeDistance: 1 * 1000,\n electrodeWidth: 0.7 * 1000,\n electrodeLength: 5 * 1000,\n outletWidth: 0.8 * 1000,\n angle: 45,\n wasteWidth: 1.2 * 1000,\n outputLength: 4 * 1000,\n keepWidth: 2 * 1000,\n pressureWidth: 0.4 * 1000,\n pressureSpacing: 1.5 * 1000,\n numberofDistributors: 5,\n channelDepth: 1000,\n electrodeDepth: 1000,\n pressureDepth: 1000\n };\n\n this.__units = {\n componentSpacing: \"μm\",\n rotation: \"°\",\n height: \"μm\",\n inletWidth: \"μm\",\n inletLength: \"μm\",\n electrodeDistance: \"μm\",\n electrodeWidth: \"μm\",\n electrodeLength: \"μm\",\n outletWidth: \"μm\",\n angle: \"°\",\n wasteWidth: \"μm\",\n outputLength: \"μm\",\n keepWidth: \"μm\",\n pressureWidth: \"μm\",\n pressureSpacing: \"μm\",\n numberofDistributors: \"μm\",\n channelDepth: \"μm\",\n electrodeDepth: \"μm\",\n pressureDepth: \"μm\"\n };\n\n this.__minimum = {\n componentSpacing: 0,\n rotation: 0,\n height: 10,\n inletWidth: 0.5 * 1000,\n inletLength: 2 * 1000,\n electrodeDistance: 0.5 * 1000,\n electrodeWidth: 0.5 * 1000,\n electrodeLength: 2.5 * 1000,\n outletWidth: 0.5 * 1000,\n angle: 0,\n wasteWidth: 0.5 * 1000,\n outputLength: 2 * 1000,\n keepWidth: 2 * 1000,\n pressureWidth: 0.2 * 1000,\n pressureSpacing: 0.5 * 1000,\n numberofDistributors: 1,\n channelDepth: 1000,\n electrodeDepth: 1000,\n pressureDepth: 1000\n };\n\n this.__maximum = {\n componentSpacing: 10000,\n rotation: 360,\n height: 1200,\n inletWidth: 2 * 1000,\n inletLength: 6 * 1000,\n electrodeDistance: 1.5 * 1000,\n electrodeWidth: 1.5 * 1000,\n electrodeLength: 7.5 * 1000,\n outletWidth: 2 * 1000,\n angle: 180,\n wasteWidth: 1.5 * 1000,\n outputLength: 6 * 1000,\n keepWidth: 3.5 * 1000,\n pressureWidth: 1 * 1000,\n pressureSpacing: 2 * 1000,\n numberofDistributors: 10,\n channelDepth: 1000,\n electrodeDepth: 1000,\n pressureDepth: 1000\n };\n\n this.__placementTool = \"multilayerPositionTool\";\n\n this.__toolParams = {\n cursorPosition: \"position\"\n };\n\n this.__featureParams = {\n componentSpacing: \"componentSpacing\",\n position: \"position\",\n rotation: \"rotation\",\n inletWidth: \"inletWidth\",\n inletLength: \"inletLength\",\n electrodeDistance: \"electrodeDistance\",\n electrodeWidth: \"electrodeWidth\",\n electrodeLength: \"electrodeLength\",\n outletWidth: \"outletWidth\",\n angle: \"angle\",\n wasteWidth: \"wasteWidth\",\n outputLength: \"outputLength\",\n keepWidth: \"keepWidth\",\n pressureWidth: \"pressureWidth\",\n pressureSpacing: \"pressureSpacing\",\n numberofDistributors: \"numberofDistributors\",\n channelDepth: \"channelDepth\",\n electrodeDepth: \"electrodeDepth\",\n pressureDepth: \"pressureDepth\"\n };\n\n this.__targetParams = {\n componentSpacing: \"componentSpacing\",\n rotation: \"rotation\",\n inletWidth: \"inletWidth\",\n inletLength: \"inletLength\",\n electrodeDistance: \"electrodeDistance\",\n electrodeWidth: \"electrodeWidth\",\n electrodeLength: \"electrodeLength\",\n outletWidth: \"outletWidth\",\n angle: \"angle\",\n wasteWidth: \"wasteWidth\",\n outputLength: \"outputLength\",\n keepWidth: \"keepWidth\",\n pressureWidth: \"pressureWidth\",\n pressureSpacing: \"pressureSpacing\",\n numberofDistributors: \"numberofDistributors\",\n channelDepth: \"channelDepth\",\n electrodeDepth: \"electrodeDepth\",\n pressureDepth: \"pressureDepth\"\n };\n\n this.__renderKeys = [\"FLOW\", \"INTEGRATION\"];\n\n this.__mint = \"DROPLET SORTER\";\n\n this.__zOffsetKeys = {\n FLOW: \"height\",\n INTEGRATION: \"electrodeDepth\"\n };\n\n this.__substrateOffset = {\n FLOW: \"0\",\n INTEGRATION: \"0\"\n };\n }\n\n getPorts(params: { [k: string]: any }) {\n const inletLength = params.inletLength;\n const angle = params.angle;\n const outputLength = params.outputLength;\n const pressureWidth = params.pressureWidth;\n const pressureSpacing = params.pressureSpacing;\n const numberofDistributors = params.numberofDistributors;\n\n const outletLen = ((numberofDistributors + 0.5) * (pressureSpacing + pressureWidth)) / Math.cos(((angle / 2) * Math.PI) / 180);\n\n const ports = [];\n\n ports.push(new ComponentPort(-inletLength, 0, \"1\", LogicalLayerType.FLOW));\n\n ports.push(\n new ComponentPort(\n outletLen * Math.cos(((angle / 2) * Math.PI) / 180) + outputLength,\n -((numberofDistributors + 0.5) * (pressureSpacing + pressureWidth) - pressureWidth / 2) * Math.tan(((angle / 2) * Math.PI) / 180),\n \"2\",\n LogicalLayerType.FLOW\n )\n );\n\n ports.push(\n new ComponentPort(\n outletLen * Math.cos(((angle / 2) * Math.PI) / 180) + outputLength,\n ((numberofDistributors + 0.5) * (pressureSpacing + pressureWidth) - pressureWidth / 2) * Math.tan(((angle / 2) * Math.PI) / 180),\n \"3\",\n LogicalLayerType.FLOW\n )\n );\n\n return ports;\n }\n\n __renderFlow(params: { [k: string]: any }) {\n const rotation = params.rotation;\n const x = params.position[0];\n const y = params.position[1];\n const color = params.color;\n const inletWidth = params.inletWidth;\n const inletLength = params.inletLength;\n const outletWidth = params.outletWidth;\n const angle = params.angle;\n const wasteWidth = params.wasteWidth;\n const outputLength = params.outputLength;\n const keepWidth = params.keepWidth;\n const pressureWidth = params.pressureWidth;\n const pressureSpacing = params.pressureSpacing;\n const numberofDistributors = params.numberofDistributors;\n const serp = new paper.CompoundPath(\"\");\n\n // pressure distributors\n for (let i = 0; i < numberofDistributors; i++) {\n const newRightX = (i + 1.5) * (pressureSpacing + pressureWidth);\n\n const newLeftX = newRightX - pressureWidth;\n\n const pHeight = (newRightX - pressureWidth / 2) * Math.tan(((angle / 2) * Math.PI) / 180);\n // upper\n let topLeft = new paper.Point(x + newLeftX, y - pHeight);\n let bottomRight = new paper.Point(x + newRightX, y);\n serp.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n // lower\n topLeft = new paper.Point(x + newLeftX, y + pHeight);\n bottomRight = new paper.Point(x + newRightX, y);\n serp.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n }\n\n const outletLen = ((numberofDistributors + 0.5) * (pressureSpacing + pressureWidth)) / Math.cos(((angle / 2) * Math.PI) / 180);\n let topLeft = new paper.Point(x, y - outletWidth / 2);\n let bottomRight = new paper.Point(x + outletLen, y + outletWidth / 2);\n\n // upper outlet\n let outlet = new paper.Path.Rectangle(topLeft, bottomRight);\n outlet.rotate(-angle / 2, new paper.Point(x, y));\n serp.addChild(outlet);\n\n // lower outlet\n outlet = new paper.Path.Rectangle(topLeft, bottomRight);\n outlet.rotate(angle / 2, new paper.Point(x, y));\n serp.addChild(outlet);\n\n // inlet\n topLeft = new paper.Point(x - inletLength, y - inletWidth / 2);\n bottomRight = new paper.Point(x, y + inletWidth / 2);\n\n serp.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n // waste\n topLeft = new paper.Point(\n x + outletLen * Math.cos(((angle / 2) * Math.PI) / 180),\n y - ((numberofDistributors + 0.5) * (pressureSpacing + pressureWidth) - pressureWidth / 2) * Math.tan(((angle / 2) * Math.PI) / 180) - wasteWidth / 2\n );\n bottomRight = new paper.Point(\n x + outletLen * Math.cos(((angle / 2) * Math.PI) / 180) + outputLength,\n y - ((numberofDistributors + 0.5) * (pressureSpacing + pressureWidth) - pressureWidth / 2) * Math.tan(((angle / 2) * Math.PI) / 180) + wasteWidth / 2\n );\n\n serp.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n // keep\n topLeft = new paper.Point(\n x + outletLen * Math.cos(((angle / 2) * Math.PI) / 180),\n y + ((numberofDistributors + 0.5) * (pressureSpacing + pressureWidth) - pressureWidth / 2) * Math.tan(((angle / 2) * Math.PI) / 180) - keepWidth / 2\n );\n bottomRight = new paper.Point(\n x + outletLen * Math.cos(((angle / 2) * Math.PI) / 180) + outputLength,\n y + ((numberofDistributors + 0.5) * (pressureSpacing + pressureWidth) - pressureWidth / 2) * Math.tan(((angle / 2) * Math.PI) / 180) + keepWidth / 2\n );\n\n serp.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n serp.rotate(rotation, new paper.Point(x, y));\n\n serp.fillColor = color;\n return serp;\n }\n\n __renderIntegrate(params: { [k: string]: any }) {\n const rotation = params.rotation;\n const x = params.position[0];\n const y = params.position[1];\n const color = params.color;\n const electrodeDistance = params.electrodeDistance;\n const electrodeWidth = params.electrodeWidth;\n const electrodeLength = params.electrodeLength;\n const angle = params.angle;\n const serp = new paper.CompoundPath(\"\");\n\n // middle electrode\n let topLeft = new paper.Point(x - electrodeWidth / 2, y + electrodeDistance);\n let bottomRight = new paper.Point(x + electrodeWidth / 2, y + electrodeDistance + electrodeLength);\n\n serp.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n // left electrode\n topLeft = new paper.Point(x - electrodeWidth / 2 - 2 * electrodeWidth, y + electrodeDistance);\n bottomRight = new paper.Point(x + electrodeWidth / 2 - 2 * electrodeWidth, y + electrodeDistance + electrodeLength);\n\n serp.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n // right electrode\n topLeft = new paper.Point(x - electrodeWidth / 2 + 2 * electrodeWidth, y + electrodeDistance + 2 * electrodeWidth * Math.tan(((angle / 2) * Math.PI) / 180));\n bottomRight = new paper.Point(\n x + electrodeWidth / 2 + 2 * electrodeWidth,\n y + electrodeDistance + 2 * electrodeWidth * Math.tan(((angle / 2) * Math.PI) / 180) + electrodeLength\n );\n\n serp.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n serp.rotate(rotation, new paper.Point(x, y));\n\n serp.fillColor = color;\n return serp;\n }\n\n // render2DTarget(key, params) {\n // const serp = this.render2D(params, key);\n\n // serp.fillColor.alpha = 0.5;\n // return serp;\n // }\n\n render2D(params: { [k: string]: any }, key = \"FLOW\") {\n if (key === \"FLOW\") {\n return this.__renderFlow(params);\n } else if (key === \"INTEGRATION\") {\n return this.__renderIntegrate(params);\n }\n throw new Error(\"Unknown render key found in DROPLET SORTER: \" + key);\n }\n\n render2DTarget(key: string | null, params: { [k: string]: any }) {\n const ret = new paper.CompoundPath(\"\");\n const flow = this.render2D(params, \"FLOW\");\n const integrate = this.render2D(params, \"INTEGRATION\");\n ret.addChild(integrate);\n ret.addChild(flow);\n ret.fillColor = params.color;\n ret.fillColor!.alpha = 0.5;\n return ret;\n }\n}\n","import Template from \"./template\";\nimport paper from \"paper\";\nimport ComponentPort from \"../core/componentPort\";\nimport { LogicalLayerType } from \"../core/init\";\n\nexport default class CapacitanceSensor extends Template {\n constructor() {\n super();\n }\n\n __setupDefinitions(): void {\n this.__unique = {\n position: \"Point\"\n };\n\n this.__heritable = {\n componentSpacing: \"Float\",\n rotation: \"Float\",\n height: \"Float\",\n inletWidth: \"Float\",\n inletLength: \"Float\",\n electrodeWidth: \"Float\",\n electrodeLength: \"Float\",\n electrodeDistance: \"Float\",\n sensorWidth: \"Float\",\n sensorLength: \"Float\",\n channelDepth: \"Float\",\n electrodeDepth: \"Float\"\n };\n\n this.__defaults = {\n componentSpacing: 1000,\n rotation: 0,\n height: 250,\n inletWidth: 1 * 1000,\n inletLength: 10 * 1000,\n electrodeWidth: 1.5 * 1000,\n electrodeLength: 4 * 1000,\n electrodeDistance: 2 * 1000,\n sensorWidth: 1 * 1000,\n sensorLength: 3 * 1000,\n channelDepth: 1000,\n electrodeDepth: 1000\n };\n\n this.__units = {\n componentSpacing: \"μm\",\n rotation: \"°\",\n height: \"μm\",\n inletWidth: \"μm\",\n inletLength: \"μm\",\n electrodeWidth: \"μm\",\n electrodeLength: \"μm\",\n electrodeDistance: \"μm\",\n sensorWidth: \"μm\",\n sensorLength: \"μm\",\n channelDepth: \"μm\",\n electrodeDepth: \"μm\"\n };\n\n this.__minimum = {\n componentSpacing: 0,\n rotation: 0,\n height: 10,\n inletWidth: 0.5 * 1000,\n inletLength: 5 * 1000,\n electrodeWidth: 1 * 1000,\n electrodeLength: 2 * 1000,\n electrodeDistance: 1 * 1000,\n sensorWidth: 0.5 * 1000,\n sensorLength: 1.5 * 1000,\n channelDepth: 1000,\n electrodeDepth: 1000\n };\n\n this.__maximum = {\n componentSpacing: 10000,\n rotation: 360,\n height: 1200,\n inletWidth: 2 * 1000,\n inletLength: 15 * 1000,\n electrodeWidth: 3 * 1000,\n electrodeLength: 6 * 1000,\n electrodeDistance: 3 * 1000,\n sensorWidth: 1.5 * 1000,\n sensorLength: 4.5 * 1000,\n channelDepth: 1000,\n electrodeDepth: 1000\n };\n\n this.__placementTool = \"multilayerPositionTool\";\n\n this.__toolParams = {\n cursorPosition: \"position\"\n };\n\n this.__featureParams = {\n componentSpacing: \"componentSpacing\",\n position: \"position\",\n rotation: \"rotation\",\n inletWidth: \"inletWidth\",\n inletLength: \"inletLength\",\n electrodeWidth: \"electrodeWidth\",\n electrodeLength: \"electrodeLength\",\n electrodeDistance: \"electrodeDistance\",\n sensorWidth: \"sensorWidth\",\n sensorLength: \"sensorLength\",\n channelDepth: \"channelDepth\",\n electrodeDepth: \"electrodeDepth\"\n };\n\n this.__targetParams = {\n componentSpacing: \"componentSpacing\",\n rotation: \"rotation\",\n inletWidth: \"inletWidth\",\n inletLength: \"inletLength\",\n electrodeWidth: \"electrodeWidth\",\n electrodeLength: \"electrodeLength\",\n electrodeDistance: \"electrodeDistance\",\n sensorWidth: \"sensorWidth\",\n sensorLength: \"sensorLength\",\n channelDepth: \"channelDepth\",\n electrodeDepth: \"electrodeDepth\"\n };\n\n this.__renderKeys = [\"FLOW\", \"INTEGRATION\"];\n\n this.__mint = \"DROPLET CAPACITANCE SENSOR\";\n\n this.__zOffsetKeys = {\n FLOW: \"height\",\n INTEGRATION: \"electrodeDepth\"\n };\n\n this.__substrateOffset = {\n FLOW: \"0\",\n INTEGRATION: \"0\"\n };\n }\n\n getPorts(params: { [k: string]: any }) {\n const inletLength = params.inletLength;\n\n const ports = [];\n\n ports.push(new ComponentPort(-inletLength / 2, 0, \"1\", LogicalLayerType.FLOW));\n\n ports.push(new ComponentPort(inletLength / 2, 0, \"2\", LogicalLayerType.FLOW));\n\n return ports;\n }\n\n __renderFlow(params: { [k: string]: any }) {\n const rotation = params.rotation;\n const x = params.position[0];\n const y = params.position[1];\n const color = params.color;\n const inletWidth = params.inletWidth;\n const inletLength = params.inletLength;\n const serp = new paper.CompoundPath(\"\");\n\n // inlet\n const topLeft = new paper.Point(x - inletLength / 2, y - inletWidth / 2);\n const bottomRight = new paper.Point(x + inletLength / 2, y + inletWidth / 2);\n\n serp.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n serp.rotate(rotation, new paper.Point(x, y));\n\n serp.fillColor = color;\n return serp;\n }\n\n __renderIntegrate(params: { [k: string]: any }) {\n const rotation = params.rotation;\n const x = params.position[0];\n const y = params.position[1];\n const color = params.color;\n const inletWidth = params.inletWidth;\n const electrodeWidth = params.electrodeWidth;\n const electrodeLength = params.electrodeLength;\n const electrodeDistance = params.electrodeDistance;\n const sensorWidth = params.sensorWidth;\n const sensorLength = params.sensorLength;\n const serp = new paper.CompoundPath(\"\");\n\n // top electrode\n let topLeft = new paper.Point(x - electrodeWidth / 2, y - inletWidth / 2 - electrodeDistance - sensorWidth / 2 - electrodeLength);\n let bottomRight = new paper.Point(x + electrodeWidth / 2, y - inletWidth / 2 - electrodeDistance - sensorWidth / 2);\n\n serp.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n // top sensor\n let elli = new paper.Path.Ellipse({\n point: [x - sensorLength / 2, y - inletWidth / 2 - electrodeDistance - sensorWidth],\n size: [sensorLength, sensorWidth]\n });\n\n serp.addChild(elli);\n\n // bottom electrode\n topLeft = new paper.Point(x - electrodeWidth / 2, y + inletWidth / 2 + electrodeDistance + sensorWidth / 2 + electrodeLength);\n bottomRight = new paper.Point(x + electrodeWidth / 2, y + inletWidth / 2 + electrodeDistance + sensorWidth / 2);\n\n serp.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n // bottom sensor\n elli = new paper.Path.Ellipse({\n point: [x - sensorLength / 2, y + inletWidth / 2 + electrodeDistance],\n size: [sensorLength, sensorWidth]\n });\n\n serp.addChild(elli);\n\n serp.rotate(rotation, new paper.Point(x, y));\n\n serp.fillColor = color;\n return serp;\n }\n\n render2D(params: { [k: string]: any }, key = \"FLOW\") {\n if (key === \"FLOW\") {\n return this.__renderFlow(params);\n } else if (key === \"INTEGRATION\") {\n return this.__renderIntegrate(params);\n }\n throw new Error(\"Unknown render key found in DROPLET CAPACITANCE SENSOR: \" + key);\n }\n\n render2DTarget(key: string | null, params: { [k: string]: any }) {\n const ret = new paper.CompoundPath(\"\");\n const flow = this.render2D(params, \"FLOW\");\n const integrate = this.render2D(params, \"INTEGRATION\");\n ret.addChild(integrate);\n ret.addChild(flow);\n ret.fillColor = params.color;\n ret.fillColor!.alpha = 0.5;\n return ret;\n }\n}\n","import Template from \"./template\";\nimport paper from \"paper\";\nimport ComponentPort from \"../core/componentPort\";\nimport { LogicalLayerType } from \"../core/init\";\n\nexport default class Splitter extends Template {\n constructor() {\n super();\n }\n\n __setupDefinitions(): void {\n this.__unique = {\n position: \"Point\"\n };\n\n this.__heritable = {\n componentSpacing: \"Float\",\n rotation: \"Float\",\n height: \"Float\",\n inletWidth: \"Float\",\n inletLength: \"Float\",\n outletWidth1: \"Float\",\n outletLength1: \"Float\",\n outletWidth2: \"Float\",\n outletLength2: \"Float\"\n };\n\n this.__defaults = {\n componentSpacing: 1000,\n rotation: 0,\n height: 250,\n inletWidth: 2 * 1000,\n inletLength: 6 * 1000,\n outletWidth1: 1 * 1000,\n outletLength1: 3 * 1000,\n outletWidth2: 2 * 1000,\n outletLength2: 3 * 1000\n };\n\n this.__units = {\n componentSpacing: \"μm\",\n rotation: \"°\",\n height: \"μm\",\n inletWidth: \"μm\",\n inletLength: \"μm\",\n outletWidth1: \"μm\",\n outletLength1: \"μm\",\n outletWidth2: \"μm\",\n outletLength2: \"μm\"\n };\n\n this.__minimum = {\n componentSpacing: 0,\n rotation: 0,\n height: 10,\n inletWidth: 1 * 1000,\n inletLength: 3 * 1000,\n outletWidth1: 0.5 * 1000,\n outletLength1: 2 * 1000,\n outletWidth2: 0.5 * 1000,\n outletLength2: 2 * 1000\n };\n\n this.__maximum = {\n componentSpacing: 10000,\n rotation: 360,\n height: 1200,\n inletWidth: 3 * 1000,\n inletLength: 8 * 1000,\n outletWidth1: 3 * 1000,\n outletLength1: 5 * 1000,\n outletWidth2: 3 * 1000,\n outletLength2: 5 * 1000\n };\n\n this.__placementTool = \"componentPositionTool\";\n\n this.__toolParams = {\n cursorPosition: \"position\"\n };\n\n this.__featureParams = {\n componentSpacing: \"componentSpacing\",\n position: \"position\",\n rotation: \"rotation\",\n height: \"height\",\n inletWidth: \"inletWidth\",\n inletLength: \"inletLength\",\n outletWidth1: \"outletWidth1\",\n outletLength1: \"outletLength1\",\n outletWidth2: \"outletWidth2\",\n outletLength2: \"outletLength2\"\n };\n\n this.__targetParams = {\n componentSpacing: \"componentSpacing\",\n rotation: \"rotation\",\n height: \"height\",\n inletWidth: \"inletWidth\",\n inletLength: \"inletLength\",\n outletWidth1: \"outletWidth1\",\n outletLength1: \"outletLength1\",\n outletWidth2: \"outletWidth2\",\n outletLength2: \"outletLength2\"\n };\n\n this.__renderKeys = [\"FLOW\"];\n\n this.__mint = \"DROPLET SPLITTER\";\n\n this.__zOffsetKeys = {\n FLOW: \"height\"\n };\n\n this.__substrateOffset = {\n FLOW: \"0\"\n };\n }\n\n getPorts(params: { [k: string]: any }) {\n const inletWidth = params.inletWidth;\n const inletLength = params.inletLength;\n const outletWidth1 = params.outletWidth1;\n const outletLength1 = params.outletLength1;\n const outletWidth2 = params.outletWidth2;\n const outletLength2 = params.outletLength2;\n\n const ports = [];\n\n // inlet\n ports.push(new ComponentPort(0, 0, \"1\", LogicalLayerType.FLOW));\n\n // outlet 1\n ports.push(new ComponentPort(inletLength - outletWidth1 / 2, -inletWidth / 2 - outletLength1, \"2\", LogicalLayerType.FLOW));\n\n // outlet 2\n ports.push(new ComponentPort(inletLength - outletWidth2 / 2, inletWidth / 2 + outletLength2, \"3\", LogicalLayerType.FLOW));\n\n return ports;\n }\n\n render2D(params: { [k: string]: any }, key: string) {\n const rotation = params.rotation;\n const x = params.position[0];\n const y = params.position[1];\n const color = params.color;\n const inletWidth = params.inletWidth;\n const inletLength = params.inletLength;\n const outletWidth1 = params.outletWidth1;\n const outletLength1 = params.outletLength1;\n const outletWidth2 = params.outletWidth2;\n const outletLength2 = params.outletLength2;\n\n const serp = new paper.CompoundPath(\"\");\n\n // inlet\n let topLeft = new paper.Point(x, y - inletWidth / 2);\n let bottomRight = new paper.Point(x + inletLength, y + inletWidth / 2);\n\n serp.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n // outlet 1\n topLeft = new paper.Point(x + inletLength - outletWidth1, y - inletWidth / 2 - outletLength1);\n bottomRight = new paper.Point(x + inletLength, y - inletWidth / 2);\n\n serp.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n // outlet 2\n topLeft = new paper.Point(x + inletLength - outletWidth2, y + inletWidth / 2);\n bottomRight = new paper.Point(x + inletLength, y + inletWidth / 2 + outletLength2);\n\n serp.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n serp.rotate(rotation, new paper.Point(x, y));\n\n serp.fillColor = color;\n return serp;\n }\n\n render2DTarget(key: string | null, params: { [k: string]: any }) {\n if (key === null) {\n key = this.__renderKeys[0];\n }\n const serp = this.render2D(params, key);\n serp.fillColor!.alpha = 0.5;\n return serp;\n }\n}\n","import Template from \"./template\";\nimport paper from \"paper\";\nimport ComponentPort from \"../core/componentPort\";\nimport { LogicalLayerType } from \"../core/init\";\n\nexport default class Node extends Template {\n constructor() {\n super();\n }\n\n __setupDefinitions(): void {\n this.__unique = {\n position: \"Point\"\n };\n\n this.__heritable = {\n componentSpacing: \"Float\",\n height: \"Float\"\n };\n\n this.__defaults = {\n componentSpacing: 1000,\n height: 100\n };\n\n this.__units = {\n componentSpacing: \"μm\",\n height: \"μm\"\n };\n\n this.__minimum = {\n componentSpacing: 10,\n height: 10\n };\n\n this.__maximum = {\n componentSpacing: 10000,\n height: 1000\n };\n\n this.__placementTool = \"componentPositionTool\";\n\n this.__toolParams = {\n position: \"position\"\n };\n\n this.__featureParams = {\n componentSpacing: \"componentSpacing\"\n };\n\n this.__targetParams = {\n componentSpacing: \"componentSpacing\"\n };\n\n this.__renderKeys = [\"FLOW\"];\n\n this.__mint = \"NODE\";\n\n this.__zOffsetKeys = {\n FLOW: \"height\"\n };\n\n this.__substrateOffset = {\n FLOW: \"0\"\n };\n }\n\n getPorts(params: { [k: string]: any }) {\n const ports = [];\n\n ports.push(new ComponentPort(0, 0, \"1\", LogicalLayerType.FLOW));\n\n return ports;\n }\n\n render2D(params: { [k: string]: any }, key: string) {\n // Regardless of the key...\n const pos = new paper.Point(0, 0);\n const outerCircle = new paper.Path.Circle(pos, 0);\n return outerCircle;\n }\n\n render2DTarget(key: string | null, params: { [k: string]: any }) {\n if (key === null) {\n key = this.__renderKeys[0];\n }\n const render = this.render2D(params, key);\n render.fillColor!.alpha = 0.5;\n return render;\n }\n}\n","import Template from \"./template\";\nimport paper from \"paper\";\nimport ComponentPort from \"../core/componentPort\";\nimport { LogicalLayerType } from \"../core/init\";\n\nexport default class DropletGeneratorT extends Template {\n constructor() {\n super();\n }\n\n __setupDefinitions(): void {\n this.__unique = {\n position: \"Point\"\n };\n\n this.__heritable = {\n componentSpacing: \"Float\",\n oilChannelWidth: \"Float\",\n waterChannelWidth: \"Float\",\n length: \"Float\",\n radius: \"Float\",\n // angle: \"Float\",\n height: \"Float\",\n rotation: \"Float\"\n };\n\n this.__defaults = {\n componentSpacing: 1000,\n oilChannelWidth: 0.6 * 1000,\n waterChannelWidth: 0.3 * 1000,\n length: 5 * 1000,\n radius: 500,\n height: 250,\n rotation: 0\n };\n\n this.__units = {\n componentSpacing: \"μm\",\n oilChannelWidth: \"μm\",\n height: \"μm\",\n waterChannelWidth: \"μm\",\n radius: \"μm\",\n rotation: \"°\",\n length: \"μm\"\n };\n\n this.__minimum = {\n componentSpacing: 0,\n oilChannelWidth: 1,\n waterChannelWidth: 1,\n radius: 1,\n rotation: 0,\n length: 0 * 1000\n };\n\n this.__maximum = {\n componentSpacing: 10000,\n oilChannelWidth: 2000,\n waterChannelWidth: 2000,\n height: 1200,\n radius: 2000,\n rotation: 360,\n length: 8 * 1000\n };\n\n this.__featureParams = {\n componentSpacing: \"componentSpacing\",\n position: \"position\",\n oilChannelWidth: \"oilChannelWidth\",\n waterChannelWidth: \"waterChannelWidth\",\n height: \"height\",\n rotation: \"rotation\",\n radius: \"radius\",\n length: \"length\"\n };\n\n this.__targetParams = {\n componentSpacing: \"componentSpacing\",\n oilChannelWidth: \"oilChannelWidth\",\n waterChannelWidth: \"waterChannelWidth\",\n height: \"height\",\n rotation: \"rotation\",\n radius: \"radius\",\n length: \"length\"\n };\n\n this.__placementTool = \"componentPositionTool\";\n\n this.__toolParams = {\n position: \"position\"\n };\n\n this.__renderKeys = [\"FLOW\"];\n\n this.__mint = \"DROPLET GENERATOR T\";\n\n this.__zOffsetKeys = {\n FLOW: \"height\"\n };\n\n this.__substrateOffset = {\n FLOW: \"0\"\n };\n }\n\n getPorts(params: { [k: string]: any }) {\n const length = params.length;\n\n const ports = [];\n\n ports.push(new ComponentPort(length / 2, 0, \"1\", LogicalLayerType.FLOW));\n\n // Out\n return ports;\n }\n\n render2D(params: { [k: string]: any }, key: string) {\n const pos = params.position;\n const x = pos[0];\n const y = pos[1];\n const color = params.color;\n const oilChannelWidth = params.oilChannelWidth;\n const waterChannelWidth = params.waterChannelWidth;\n const radius = params.radius;\n const rotation = params.rotation;\n const length = params.length;\n\n const ret = new paper.CompoundPath(\"\");\n\n let topLeft = new paper.Point(x - length / 2, y - oilChannelWidth / 2);\n let bottomRight = new paper.Point(x + length / 2, y + oilChannelWidth / 2);\n\n ret.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n let circ = new paper.Path.Circle(new paper.Point(x - length / 2, y), radius);\n\n ret.addChild(circ);\n\n topLeft = new paper.Point(x - waterChannelWidth / 2, y);\n bottomRight = new paper.Point(x + waterChannelWidth / 2, y + length / 2);\n\n ret.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n circ = new paper.Path.Circle(new paper.Point(x, y + length / 2), radius);\n\n ret.addChild(circ);\n\n // Rotate the geometry\n ret.closed = true;\n ret.rotate(rotation, new paper.Point(x, y));\n ret.fillColor = color;\n\n return ret;\n }\n\n render2DTarget(key: string | null, params: { [k: string]: any }) {\n if (key === null) {\n key = this.__renderKeys[0];\n }\n const render = this.render2D(params, key);\n render.fillColor!.alpha = 0.5;\n return render;\n }\n}\n","import Template from \"./template\";\nimport paper from \"paper\";\nimport ComponentPort from \"../core/componentPort\";\nimport { LogicalLayerType } from \"../core/init\";\n\nexport default class DropletGeneratorFlowFocus extends Template {\n constructor() {\n super();\n }\n\n __setupDefinitions(): void {\n this.__unique = {\n position: \"Point\"\n };\n\n this.__heritable = {\n componentSpacing: \"Float\",\n oilChannelWidth: \"Float\",\n waterChannelWidth: \"Float\",\n length: \"Float\",\n radius: \"Float\",\n angle: \"Float\",\n height: \"Float\",\n rotation: \"Float\"\n };\n\n this.__defaults = {\n componentSpacing: 1000,\n oilChannelWidth: 0.4 * 1000,\n waterChannelWidth: 0.2 * 1000,\n length: 3 * 1000,\n radius: 500,\n angle: 45,\n height: 250,\n rotation: 0\n };\n\n this.__units = {\n componentSpacing: \"μm\",\n oilChannelWidth: \"μm\",\n height: \"μm\",\n waterChannelWidth: \"μm\",\n radius: \"μm\",\n length: \"μm\",\n rotation: \"°\",\n angle: \"°\"\n };\n\n this.__minimum = {\n componentSpacing: 0,\n oilChannelWidth: 1,\n waterChannelWidth: 1,\n length: 1,\n radius: 1,\n angle: 1,\n rotation: 0\n };\n\n this.__maximum = {\n componentSpacing: 10000,\n oilChannelWidth: 2000,\n waterChannelWidth: 2000,\n length: 20000,\n angle: 360,\n height: 1200,\n radius: 2000,\n rotation: 360\n };\n\n this.__featureParams = {\n componentSpacing: \"componentSpacing\",\n position: \"position\",\n oilChannelWidth: \"oilChannelWidth\",\n waterChannelWidth: \"waterChannelWidth\",\n length: \"length\",\n angle: \"angle\",\n height: \"height\",\n rotation: \"rotation\",\n radius: \"radius\"\n };\n\n this.__targetParams = {\n componentSpacing: \"componentSpacing\",\n oilChannelWidth: \"oilChannelWidth\",\n waterChannelWidth: \"waterChannelWidth\",\n length: \"length\",\n angle: \"angle\",\n height: \"height\",\n rotation: \"rotation\",\n radius: \"radius\"\n };\n\n this.__placementTool = \"componentPositionTool\";\n\n this.__toolParams = {\n position: \"position\"\n };\n\n this.__renderKeys = [\"FLOW\"];\n\n this.__mint = \"DROPLET GENERATOR FLOW FOCUS\";\n\n this.__zOffsetKeys = {\n FLOW: \"height\"\n };\n\n this.__substrateOffset = {\n FLOW: \"0\"\n };\n }\n\n getPorts(params: { [k: string]: any }) {\n const ports = [];\n\n ports.push(new ComponentPort(0, 0, \"1\", LogicalLayerType.FLOW));\n\n // Out\n return ports;\n }\n\n render2D(params: { [k: string]: any }, key: string) {\n const pos = params.position;\n const x = pos[0];\n const y = pos[1];\n const color = params.color;\n const oilChannelWidth = params.oilChannelWidth;\n const waterChannelWidth = params.waterChannelWidth;\n const length = params.length;\n const angle = params.angle;\n const radius = params.radius;\n const rotation = params.rotation;\n\n const ret = new paper.CompoundPath(\"\");\n\n // middle path\n let topLeft = new paper.Point(x - length / 3 - 2 * length, y - waterChannelWidth / 2);\n let bottomRight = new paper.Point(x, y + waterChannelWidth / 2);\n\n ret.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n let circ = new paper.Path.Circle(new paper.Point(x - length / 3 - 2 * length, y), radius);\n\n ret.addChild(circ);\n // top tilt path\n const Hlength = length / Math.cos((angle * Math.PI) / 180);\n\n topLeft = new paper.Point(x - length / 3 - Hlength, y - oilChannelWidth / 2);\n bottomRight = new paper.Point(x - length / 3, y + oilChannelWidth / 2);\n\n let tiltBlock = new paper.Path.Rectangle(topLeft, bottomRight);\n tiltBlock.rotate(angle, new paper.Point(x - length / 3, y));\n\n ret.addChild(tiltBlock);\n\n // bottom tilt path\n tiltBlock = new paper.Path.Rectangle(topLeft, bottomRight);\n tiltBlock.rotate(-angle, new paper.Point(x - length / 3, y));\n\n ret.addChild(tiltBlock);\n\n // top part\n const disFromMid = Hlength * Math.sin((angle * Math.PI) / 180);\n const angleS = 90 - angle;\n const seamCover = (oilChannelWidth / 2) * Math.tan((angleS * Math.PI) / 180);\n\n topLeft = new paper.Point(x - length / 3 - length - oilChannelWidth / 2, y - disFromMid - (2 * length) / 3 + seamCover);\n bottomRight = new paper.Point(x - length / 3 - length + oilChannelWidth / 2, y - disFromMid + seamCover);\n\n ret.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n topLeft = new paper.Point(x - length / 3 - 2 * length, y - disFromMid - (2 * length) / 3 + seamCover);\n bottomRight = new paper.Point(x - length / 3 - length - oilChannelWidth / 2, y - disFromMid - (2 * length) / 3 + oilChannelWidth + seamCover);\n\n ret.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n circ = new paper.Path.Circle(new paper.Point(x - length / 3 - 2 * length, y - disFromMid - (2 * length) / 3 + seamCover + oilChannelWidth / 2), radius);\n\n ret.addChild(circ);\n\n // bottom part\n topLeft = new paper.Point(x - length / 3 - length - oilChannelWidth / 2, y + disFromMid + (2 * length) / 3 - seamCover);\n bottomRight = new paper.Point(x - length / 3 - length + oilChannelWidth / 2, y + disFromMid - seamCover);\n\n ret.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n topLeft = new paper.Point(x - length / 3 - 2 * length, y + disFromMid + (2 * length) / 3 - seamCover);\n bottomRight = new paper.Point(x - length / 3 - length - oilChannelWidth / 2, y + disFromMid + (2 * length) / 3 - oilChannelWidth - seamCover);\n\n ret.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n circ = new paper.Path.Circle(new paper.Point(x - length / 3 - 2 * length, y + disFromMid + (2 * length) / 3 - seamCover - oilChannelWidth / 2), radius);\n\n ret.addChild(circ);\n\n // Rotate the geometry\n ret.rotate(rotation, new paper.Point(pos[0], pos[1]));\n\n ret.closed = true;\n ret.fillColor = color;\n return ret;\n }\n\n render2DTarget(key: string | null, params: { [k: string]: any }) {\n if (key === null) {\n key = this.__renderKeys[0];\n }\n const render = this.render2D(params, key);\n render.fillColor!.alpha = 0.5;\n return render;\n }\n}\n","import Template from \"./template\";\nimport paper from \"paper\";\nimport ComponentPort from \"../core/componentPort\";\nimport { LogicalLayerType } from \"../core/init\";\n\nexport default class LogicArray extends Template {\n constructor() {\n super();\n }\n\n __setupDefinitions(): void {\n this.__unique = {\n position: \"Point\"\n };\n\n this.__heritable = {\n componentSpacing: \"Float\",\n chamberWidth: \"Float\",\n height: \"Float\",\n chamberLength: \"Float\",\n flowChannelWidth: \"Float\",\n controlChannelWidth: \"Float\",\n portRadius: \"Float\",\n rotation: \"Float\"\n };\n\n this.__defaults = {\n componentSpacing: 1000,\n height: 1.1 * 1000,\n chamberWidth: 1.5 * 1000,\n chamberLength: 1.5 * 1000,\n flowChannelWidth: 0.6 * 1000,\n controlChannelWidth: 0.4 * 1000,\n portRadius: 1000,\n rotation: 0\n };\n\n this.__units = {\n componentSpacing: \"μm\",\n chamberWidth: \"μm\",\n chamberLength: \"μm\",\n flowChannelWidth: \"μm\",\n controlChannelWidth: \"μm\",\n portRadius: \"μm\",\n height: \"μm\",\n rotation: \"°\"\n };\n\n this.__minimum = {\n componentSpacing: 0,\n height: 1,\n chamberWidth: 1,\n chamberLength: 1,\n flowChannelWidth: 1,\n controlChannelWidth: 1,\n portRadius: 1,\n rotation: 0\n };\n\n this.__maximum = {\n componentSpacing: 10000,\n height: 1.1 * 10000,\n chamberWidth: 10000,\n chamberLength: 10000,\n flowChannelWidth: 10000,\n controlChannelWidth: 10000,\n portRadius: 10000,\n rotation: 360\n };\n\n this.__placementTool = \"multilayerPositionTool\";\n\n this.__toolParams = {\n position: \"position\"\n };\n\n this.__featureParams = {\n componentSpacing: \"componentSpacing\",\n chamberWidth: \"chamberWidth\",\n flowChannelWidth: \"flowChannelWidth\",\n controlChannelWidth: \"controlChannelWidth\",\n portRadius: \"portRadius\",\n chamberLength: \"chamberLength\",\n height: \"height\",\n position: \"position\",\n rotation: \"rotation\"\n };\n\n this.__targetParams = {\n componentSpacing: \"componentSpacing\",\n chamberWidth: \"chamberWidth\",\n flowChannelWidth: \"flowChannelWidth\",\n controlChannelWidth: \"controlChannelWidth\",\n portRadius: \"portRadius\",\n chamberLength: \"chamberLength\",\n height: \"height\",\n rotation: \"rotation\"\n };\n\n this.__renderKeys = [\"FLOW\", \"CONTROL\", \"CELL\"];\n\n this.__mint = \"LOGIC ARRAY\";\n\n this.__zOffsetKeys = {\n FLOW: \"height\",\n CONTROL: \"height\",\n CELL: \"height\"\n };\n\n this.__substrateOffset = {\n FLOW: \"0\",\n CONTROL: \"+1\",\n CELL: \"0\"\n };\n }\n\n render2D(params: { [k: string]: any }, key: string) {\n if (key === \"FLOW\") {\n return this.__drawFlow(params);\n } else if (key === \"CONTROL\") {\n return this.__drawControl(params);\n } else if (key === \"CELL\") {\n console.log(\"cell\");\n return this.__drawCell(params);\n }\n throw new Error(\"Invalid key passed to LogicArray render2D\");\n }\n\n __drawFlow(params: { [k: string]: any }) {\n const x = params.position[0];\n const y = params.position[1];\n const color = params.color;\n const spacing = params.componentSpacing;\n const chamberWidth = params.chamberWidth;\n const flowChannelWidth = params.flowChannelWidth;\n const controlChannelWidth = params.controlChannelWidth;\n const portRadius = params.portRadius;\n const chamberLength = params.chamberLength;\n const rotation = params.rotation;\n\n const ret = new paper.CompoundPath(\"\");\n const topDistance = 14 * spacing;\n const inWidth = 5 * spacing;\n const pathLength = 20 * spacing;\n const extraLength = 2 * spacing;\n\n // middle path\n let topLeft = new paper.Point(x, y - flowChannelWidth / 2);\n let bottomRight = new paper.Point(x + pathLength, y + flowChannelWidth / 2);\n\n let rec: paper.Rectangle | paper.PathItem = new paper.Path.Rectangle(topLeft, bottomRight);\n\n /// / left\n topLeft = new paper.Point(x + (2 * inWidth) / 3 - controlChannelWidth, y - flowChannelWidth / 2 - controlChannelWidth);\n bottomRight = new paper.Point(x + (2 * inWidth) / 3 + controlChannelWidth, y + flowChannelWidth / 2 + controlChannelWidth);\n rec = rec.subtract(new paper.Path.Rectangle(topLeft, bottomRight));\n\n /// / second left\n topLeft = new paper.Point(x + inWidth + pathLength / 2 - extraLength - controlChannelWidth, y - flowChannelWidth / 2 - controlChannelWidth);\n bottomRight = new paper.Point(x + inWidth + pathLength / 2 - extraLength + controlChannelWidth, y + flowChannelWidth / 2 + controlChannelWidth);\n rec = rec.subtract(new paper.Path.Rectangle(topLeft, bottomRight));\n\n /// / right\n topLeft = new paper.Point(x + inWidth + pathLength / 2 + extraLength - controlChannelWidth, y - flowChannelWidth / 2 - controlChannelWidth);\n bottomRight = new paper.Point(x + inWidth + pathLength / 2 + extraLength + controlChannelWidth, y + flowChannelWidth / 2 + controlChannelWidth);\n rec = rec.subtract(new paper.Path.Rectangle(topLeft, bottomRight));\n ret.addChild(rec);\n\n // top part ** cut\n topLeft = new paper.Point(x, y - topDistance - flowChannelWidth / 2);\n bottomRight = new paper.Point(x + inWidth, y - topDistance + flowChannelWidth / 2);\n\n rec = new paper.Path.Rectangle(topLeft, bottomRight);\n\n topLeft = new paper.Point(x + inWidth / 3 - controlChannelWidth, y - topDistance - flowChannelWidth / 2 - controlChannelWidth);\n bottomRight = new paper.Point(x + inWidth / 3 + controlChannelWidth, y - topDistance + flowChannelWidth / 2 + controlChannelWidth);\n\n const cutrec = new paper.Path.Rectangle(topLeft, bottomRight);\n\n rec = rec.subtract(cutrec);\n\n ret.addChild(rec);\n\n topLeft = new paper.Point(x + inWidth - flowChannelWidth / 2, y - topDistance - topDistance / 2);\n bottomRight = new paper.Point(x + inWidth + flowChannelWidth / 2, y - topDistance + topDistance / 2);\n\n ret.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n topLeft = new paper.Point(x + inWidth, y - topDistance - topDistance / 2);\n bottomRight = new paper.Point(x + inWidth + pathLength, y - topDistance - topDistance / 2 + flowChannelWidth);\n\n ret.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n topLeft = new paper.Point(x + inWidth + pathLength - flowChannelWidth, y - topDistance - topDistance / 2);\n bottomRight = new paper.Point(x + inWidth + pathLength, y - topDistance + topDistance / 2);\n\n ret.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n // top part bottom line ** cut for control\n topLeft = new paper.Point(x + inWidth, y - topDistance + topDistance / 2 - flowChannelWidth);\n bottomRight = new paper.Point(x + inWidth + pathLength, y - topDistance + topDistance / 2);\n\n rec = new paper.Path.Rectangle(topLeft, bottomRight);\n\n /// / left\n topLeft = new paper.Point(x + pathLength / 2 - extraLength - controlChannelWidth, y - topDistance / 2 - flowChannelWidth - controlChannelWidth);\n bottomRight = new paper.Point(x + pathLength / 2 - extraLength + controlChannelWidth, y - topDistance / 2 + controlChannelWidth);\n rec = rec.subtract(new paper.Path.Rectangle(topLeft, bottomRight));\n\n /// / second left\n topLeft = new paper.Point(x + inWidth + pathLength / 2 - extraLength - controlChannelWidth, y - topDistance / 2 - flowChannelWidth - controlChannelWidth);\n bottomRight = new paper.Point(x + inWidth + pathLength / 2 - extraLength + controlChannelWidth, y - topDistance / 2 + controlChannelWidth);\n rec = rec.subtract(new paper.Path.Rectangle(topLeft, bottomRight));\n\n /// / second right\n topLeft = new paper.Point(x + inWidth + pathLength / 2 + extraLength - controlChannelWidth, y - topDistance / 2 - flowChannelWidth - controlChannelWidth);\n bottomRight = new paper.Point(x + inWidth + pathLength / 2 + extraLength + controlChannelWidth, y - topDistance / 2 + controlChannelWidth);\n rec = rec.subtract(new paper.Path.Rectangle(topLeft, bottomRight));\n\n /// / right\n topLeft = new paper.Point(x + 2 * inWidth + pathLength / 2 + extraLength - controlChannelWidth, y - topDistance / 2 - flowChannelWidth - controlChannelWidth);\n bottomRight = new paper.Point(x + 2 * inWidth + pathLength / 2 + extraLength + controlChannelWidth, y - topDistance / 2 + controlChannelWidth);\n rec = rec.subtract(new paper.Path.Rectangle(topLeft, bottomRight));\n ret.addChild(rec);\n\n // bottom part ** cut\n topLeft = new paper.Point(x, y + topDistance + flowChannelWidth / 2);\n bottomRight = new paper.Point(x + inWidth, y + topDistance - flowChannelWidth / 2);\n\n rec = new paper.Path.Rectangle(topLeft, bottomRight);\n\n topLeft = new paper.Point(x + inWidth / 3 - controlChannelWidth, y + topDistance - flowChannelWidth / 2 - controlChannelWidth);\n bottomRight = new paper.Point(x + inWidth / 3 + controlChannelWidth, y + topDistance + flowChannelWidth / 2 + controlChannelWidth);\n rec = rec.subtract(new paper.Path.Rectangle(topLeft, bottomRight));\n ret.addChild(rec);\n\n topLeft = new paper.Point(x + inWidth - flowChannelWidth / 2, y + topDistance + topDistance / 2);\n bottomRight = new paper.Point(x + inWidth + flowChannelWidth / 2, y + topDistance - topDistance / 2);\n\n ret.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n topLeft = new paper.Point(x + inWidth, y + topDistance + topDistance / 2);\n bottomRight = new paper.Point(x + inWidth + pathLength, y + topDistance + topDistance / 2 - flowChannelWidth);\n\n ret.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n topLeft = new paper.Point(x + inWidth + pathLength - flowChannelWidth, y + topDistance + topDistance / 2);\n bottomRight = new paper.Point(x + inWidth + pathLength, y + topDistance - topDistance / 2);\n\n ret.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n // bottom part top line ** cut for control\n topLeft = new paper.Point(x + inWidth, y + topDistance - topDistance / 2 + flowChannelWidth);\n bottomRight = new paper.Point(x + inWidth + pathLength, y + topDistance - topDistance / 2);\n\n rec = new paper.Path.Rectangle(topLeft, bottomRight);\n\n /// / left\n topLeft = new paper.Point(x + pathLength / 2 - extraLength - controlChannelWidth, y + topDistance / 2 - controlChannelWidth);\n bottomRight = new paper.Point(x + pathLength / 2 - extraLength + controlChannelWidth, y + topDistance / 2 + flowChannelWidth + controlChannelWidth);\n rec = rec.subtract(new paper.Path.Rectangle(topLeft, bottomRight));\n\n /// / second left\n topLeft = new paper.Point(x + inWidth + pathLength / 2 - extraLength - controlChannelWidth, y + topDistance / 2 - controlChannelWidth);\n bottomRight = new paper.Point(x + inWidth + pathLength / 2 - extraLength + controlChannelWidth, y + topDistance / 2 + flowChannelWidth + controlChannelWidth);\n rec = rec.subtract(new paper.Path.Rectangle(topLeft, bottomRight));\n\n /// / second right\n topLeft = new paper.Point(x + inWidth + pathLength / 2 + extraLength - controlChannelWidth, y + topDistance / 2 - controlChannelWidth);\n bottomRight = new paper.Point(x + inWidth + pathLength / 2 + extraLength + controlChannelWidth, y + topDistance / 2 + flowChannelWidth + controlChannelWidth);\n rec = rec.subtract(new paper.Path.Rectangle(topLeft, bottomRight));\n\n /// / right\n topLeft = new paper.Point(x + 2 * inWidth + pathLength / 2 + extraLength - controlChannelWidth, y + topDistance / 2 - controlChannelWidth);\n bottomRight = new paper.Point(x + 2 * inWidth + pathLength / 2 + extraLength + controlChannelWidth, y + topDistance / 2 + flowChannelWidth + controlChannelWidth);\n rec = rec.subtract(new paper.Path.Rectangle(topLeft, bottomRight));\n ret.addChild(rec);\n\n // insde middle ** cut\n topLeft = new paper.Point(x + inWidth + pathLength / 2 - flowChannelWidth / 2, y - topDistance / 2);\n bottomRight = new paper.Point(x + inWidth + pathLength / 2 + flowChannelWidth / 2, y + topDistance / 2);\n\n rec = new paper.Path.Rectangle(topLeft, bottomRight);\n\n /// / top\n topLeft = new paper.Point(x + inWidth + pathLength / 2 - flowChannelWidth / 2 - controlChannelWidth, y - topDistance / 2 + 4 * spacing - controlChannelWidth);\n bottomRight = new paper.Point(x + inWidth + pathLength / 2 + flowChannelWidth / 2 + controlChannelWidth, y - topDistance / 2 + 4 * spacing + controlChannelWidth);\n rec = rec.subtract(new paper.Path.Rectangle(topLeft, bottomRight));\n\n /// / bottom\n topLeft = new paper.Point(x + inWidth + pathLength / 2 - flowChannelWidth / 2 - controlChannelWidth, y + topDistance / 2 - 4 * spacing - controlChannelWidth);\n bottomRight = new paper.Point(x + inWidth + pathLength / 2 + flowChannelWidth / 2 + controlChannelWidth, y + topDistance / 2 - 4 * spacing + controlChannelWidth);\n rec = rec.subtract(new paper.Path.Rectangle(topLeft, bottomRight));\n ret.addChild(rec);\n\n // inside left ** cut\n topLeft = new paper.Point(x + pathLength / 2 - flowChannelWidth / 2, y - topDistance - topDistance / 4);\n bottomRight = new paper.Point(x + pathLength / 2 + flowChannelWidth / 2, y + topDistance + topDistance / 4);\n\n rec = new paper.Path.Rectangle(topLeft, bottomRight);\n\n /// / top\n topLeft = new paper.Point(x + pathLength / 2 - flowChannelWidth / 2 - controlChannelWidth, y - topDistance / 2 - 5 * spacing - controlChannelWidth);\n bottomRight = new paper.Point(x + pathLength / 2 + flowChannelWidth / 2 + controlChannelWidth, y - topDistance / 2 - 5 * spacing + controlChannelWidth);\n rec = rec.subtract(new paper.Path.Rectangle(topLeft, bottomRight));\n\n /// / second top\n topLeft = new paper.Point(x + pathLength / 2 - flowChannelWidth / 2 - controlChannelWidth, y - topDistance / 2 + 3 * spacing - controlChannelWidth);\n bottomRight = new paper.Point(x + pathLength / 2 + flowChannelWidth / 2 + controlChannelWidth, y - topDistance / 2 + 3 * spacing + controlChannelWidth);\n rec = rec.subtract(new paper.Path.Rectangle(topLeft, bottomRight));\n\n /// / second bottom\n topLeft = new paper.Point(x + pathLength / 2 - flowChannelWidth / 2 - controlChannelWidth, y + topDistance / 2 - 3 * spacing - controlChannelWidth);\n bottomRight = new paper.Point(x + pathLength / 2 + flowChannelWidth / 2 + controlChannelWidth, y + topDistance / 2 - 3 * spacing + controlChannelWidth);\n rec = rec.subtract(new paper.Path.Rectangle(topLeft, bottomRight));\n\n /// / bottom\n topLeft = new paper.Point(x + pathLength / 2 - flowChannelWidth / 2 - controlChannelWidth, y + topDistance / 2 + 5 * spacing - controlChannelWidth);\n bottomRight = new paper.Point(x + pathLength / 2 + flowChannelWidth / 2 + controlChannelWidth, y + topDistance / 2 + 5 * spacing + controlChannelWidth);\n rec = rec.subtract(new paper.Path.Rectangle(topLeft, bottomRight));\n ret.addChild(rec);\n\n let circ = new paper.Path.Circle(new paper.Point(x + pathLength / 2, y - topDistance - topDistance / 4), portRadius);\n\n ret.addChild(circ);\n\n circ = new paper.Path.Circle(new paper.Point(x + pathLength / 2, y + topDistance + topDistance / 4), portRadius);\n\n ret.addChild(circ);\n\n // inside right ** cut\n topLeft = new paper.Point(x + 2 * inWidth + pathLength / 2 - flowChannelWidth, y - topDistance - topDistance / 4);\n bottomRight = new paper.Point(x + 2 * inWidth + pathLength / 2, y + topDistance + topDistance / 4);\n\n rec = new paper.Path.Rectangle(topLeft, bottomRight);\n\n /// / top\n topLeft = new paper.Point(x + 2 * inWidth + pathLength / 2 - flowChannelWidth - controlChannelWidth, y - topDistance / 2 - 2 * spacing - controlChannelWidth);\n bottomRight = new paper.Point(x + 2 * inWidth + pathLength / 2 + controlChannelWidth, y - topDistance / 2 - 2 * spacing + controlChannelWidth);\n rec = rec.subtract(new paper.Path.Rectangle(topLeft, bottomRight));\n\n /// / second top\n topLeft = new paper.Point(x + 2 * inWidth + pathLength / 2 - flowChannelWidth - controlChannelWidth, y - topDistance / 2 + 5 * spacing - controlChannelWidth);\n bottomRight = new paper.Point(x + 2 * inWidth + pathLength / 2 + controlChannelWidth, y - topDistance / 2 + 5 * spacing + controlChannelWidth);\n rec = rec.subtract(new paper.Path.Rectangle(topLeft, bottomRight));\n\n /// / second bottom\n topLeft = new paper.Point(x + 2 * inWidth + pathLength / 2 - flowChannelWidth - controlChannelWidth, y + topDistance / 2 - 5 * spacing - controlChannelWidth);\n bottomRight = new paper.Point(x + 2 * inWidth + pathLength / 2 + controlChannelWidth, y + topDistance / 2 - 5 * spacing + controlChannelWidth);\n rec = rec.subtract(new paper.Path.Rectangle(topLeft, bottomRight));\n\n /// / bottom\n topLeft = new paper.Point(x + 2 * inWidth + pathLength / 2 - flowChannelWidth - controlChannelWidth, y + topDistance / 2 + 2 * spacing - controlChannelWidth);\n bottomRight = new paper.Point(x + 2 * inWidth + pathLength / 2 + controlChannelWidth, y + topDistance / 2 + 2 * spacing + controlChannelWidth);\n rec = rec.subtract(new paper.Path.Rectangle(topLeft, bottomRight));\n ret.addChild(rec);\n\n circ = new paper.Path.Circle(new paper.Point(x + 2 * inWidth + pathLength / 2 - flowChannelWidth / 2, y - topDistance - topDistance / 4), portRadius);\n\n ret.addChild(circ);\n\n circ = new paper.Path.Circle(new paper.Point(x + 2 * inWidth + pathLength / 2 - flowChannelWidth / 2, y + topDistance + topDistance / 4), portRadius);\n\n ret.addChild(circ);\n\n ret.fillColor = color;\n ret.rotate(rotation, new paper.Point(x, y));\n return ret;\n }\n\n __drawControl(params: { [k: string]: any }) {\n const x = params.position[0];\n const y = params.position[1];\n const color = params.color;\n const spacing = params.componentSpacing;\n const chamberWidth = params.chamberWidth;\n const flowChannelWidth = params.flowChannelWidth;\n const controlChannelWidth = params.controlChannelWidth;\n const portRadius = params.portRadius;\n const chamberLength = params.chamberLength;\n const rotation = params.rotation;\n\n const ret = new paper.CompoundPath(\"\");\n const topDistance = 14 * spacing;\n const inWidth = 5 * spacing;\n const pathLength = 20 * spacing;\n\n const extraLength = 2 * spacing;\n\n const control = new paper.CompoundPath(\"\");\n\n // control 24\n let topLeft = new paper.Point(x + inWidth / 3 - controlChannelWidth / 2, y - topDistance - topDistance / 2 - extraLength);\n let bottomRight = new paper.Point(x + inWidth / 3 + controlChannelWidth / 2, y - topDistance);\n control.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n topLeft = new paper.Point(x + inWidth / 3 - controlChannelWidth, y - topDistance - flowChannelWidth / 2 - controlChannelWidth);\n bottomRight = new paper.Point(x + inWidth / 3 + controlChannelWidth, y - topDistance + flowChannelWidth / 2 + controlChannelWidth);\n\n control.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n // cnotrol 25\n topLeft = new paper.Point(x + (2 * inWidth) / 3 - controlChannelWidth / 2, y - topDistance - topDistance / 2 - extraLength);\n bottomRight = new paper.Point(x + (2 * inWidth) / 3 + controlChannelWidth / 2, y);\n control.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n topLeft = new paper.Point(x + (2 * inWidth) / 3 - controlChannelWidth, y - flowChannelWidth / 2 - controlChannelWidth);\n bottomRight = new paper.Point(x + (2 * inWidth) / 3 + controlChannelWidth, y + flowChannelWidth / 2 + controlChannelWidth);\n control.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n // control 26\n topLeft = new paper.Point(x + inWidth / 3 - controlChannelWidth / 2, y + topDistance + topDistance / 2 + extraLength);\n bottomRight = new paper.Point(x + inWidth / 3 + controlChannelWidth / 2, y + topDistance);\n control.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n topLeft = new paper.Point(x + inWidth / 3 - controlChannelWidth, y + topDistance - flowChannelWidth / 2 - controlChannelWidth);\n bottomRight = new paper.Point(x + inWidth / 3 + controlChannelWidth, y + topDistance + flowChannelWidth / 2 + controlChannelWidth);\n control.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n // control 8\n topLeft = new paper.Point(x + 2 * inWidth + pathLength / 2 - flowChannelWidth / 2, y - topDistance / 2 - 2 * spacing - controlChannelWidth / 2);\n bottomRight = new paper.Point(x + inWidth + pathLength + extraLength, y - topDistance / 2 - 2 * spacing + controlChannelWidth / 2);\n control.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n topLeft = new paper.Point(x + 2 * inWidth + pathLength / 2 - flowChannelWidth - controlChannelWidth, y - topDistance / 2 - 2 * spacing - controlChannelWidth);\n bottomRight = new paper.Point(x + 2 * inWidth + pathLength / 2 + controlChannelWidth, y - topDistance / 2 - 2 * spacing + controlChannelWidth);\n control.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n // control 7\n topLeft = new paper.Point(x + inWidth + pathLength / 2 + extraLength, y - topDistance / 2 - 3 * spacing - controlChannelWidth / 2);\n bottomRight = new paper.Point(x + inWidth + pathLength + extraLength, y - topDistance / 2 - 3 * spacing + controlChannelWidth / 2);\n control.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n topLeft = new paper.Point(x + inWidth + pathLength / 2 + extraLength - controlChannelWidth / 2, y - topDistance / 2 - 3 * spacing - controlChannelWidth / 2);\n bottomRight = new paper.Point(x + inWidth + pathLength / 2 + extraLength + controlChannelWidth / 2, y - topDistance / 2);\n control.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n topLeft = new paper.Point(x + inWidth + pathLength / 2 + extraLength - controlChannelWidth, y - topDistance / 2 - flowChannelWidth - controlChannelWidth);\n bottomRight = new paper.Point(x + inWidth + pathLength / 2 + extraLength + controlChannelWidth, y - topDistance / 2 + controlChannelWidth);\n control.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n // control 6\n topLeft = new paper.Point(x + inWidth + pathLength / 2 - extraLength, y - topDistance / 2 - 4 * spacing - controlChannelWidth / 2);\n bottomRight = new paper.Point(x + inWidth + pathLength + extraLength, y - topDistance / 2 - 4 * spacing + controlChannelWidth / 2);\n control.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n topLeft = new paper.Point(x + inWidth + pathLength / 2 - extraLength - controlChannelWidth / 2, y - topDistance / 2 - 4 * spacing - controlChannelWidth / 2);\n bottomRight = new paper.Point(x + inWidth + pathLength / 2 - extraLength + controlChannelWidth / 2, y - topDistance / 2);\n control.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n topLeft = new paper.Point(x + inWidth + pathLength / 2 - extraLength - controlChannelWidth, y - topDistance / 2 - flowChannelWidth - controlChannelWidth);\n bottomRight = new paper.Point(x + inWidth + pathLength / 2 - extraLength + controlChannelWidth, y - topDistance / 2 + controlChannelWidth);\n control.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n // control 5\n topLeft = new paper.Point(x + pathLength / 2, y - topDistance / 2 - 5 * spacing - controlChannelWidth / 2);\n bottomRight = new paper.Point(x + inWidth + pathLength + extraLength, y - topDistance / 2 - 5 * spacing + controlChannelWidth / 2);\n control.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n topLeft = new paper.Point(x + pathLength / 2 - flowChannelWidth / 2 - controlChannelWidth, y - topDistance / 2 - 5 * spacing - controlChannelWidth);\n bottomRight = new paper.Point(x + pathLength / 2 + flowChannelWidth / 2 + controlChannelWidth, y - topDistance / 2 - 5 * spacing + controlChannelWidth);\n control.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n // control 4\n topLeft = new paper.Point(x + pathLength / 2 - extraLength, y - topDistance / 2 - 6 * spacing - controlChannelWidth / 2);\n bottomRight = new paper.Point(x + inWidth + pathLength + extraLength, y - topDistance / 2 - 6 * spacing + controlChannelWidth / 2);\n control.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n topLeft = new paper.Point(x + pathLength / 2 - extraLength - controlChannelWidth / 2, y - topDistance / 2 - 6 * spacing - controlChannelWidth / 2);\n bottomRight = new paper.Point(x + pathLength / 2 - extraLength + controlChannelWidth / 2, y - topDistance / 2);\n control.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n topLeft = new paper.Point(x + pathLength / 2 - extraLength - controlChannelWidth, y - topDistance / 2 - flowChannelWidth - controlChannelWidth);\n bottomRight = new paper.Point(x + pathLength / 2 - extraLength + controlChannelWidth, y - topDistance / 2 + controlChannelWidth);\n control.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n // control 19\n topLeft = new paper.Point(x + 2 * inWidth + pathLength / 2 - flowChannelWidth / 2, y + topDistance / 2 + 2 * spacing + controlChannelWidth / 2);\n bottomRight = new paper.Point(x + inWidth + pathLength + extraLength, y + topDistance / 2 + 2 * spacing - controlChannelWidth / 2);\n control.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n topLeft = new paper.Point(x + 2 * inWidth + pathLength / 2 - flowChannelWidth - controlChannelWidth, y + topDistance / 2 + 2 * spacing - controlChannelWidth);\n bottomRight = new paper.Point(x + 2 * inWidth + pathLength / 2 + controlChannelWidth, y + topDistance / 2 + 2 * spacing + controlChannelWidth);\n control.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n // control 20\n topLeft = new paper.Point(x + inWidth + pathLength / 2 + extraLength, y + topDistance / 2 + 3 * spacing + controlChannelWidth / 2);\n bottomRight = new paper.Point(x + inWidth + pathLength + extraLength, y + topDistance / 2 + 3 * spacing - controlChannelWidth / 2);\n control.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n topLeft = new paper.Point(x + inWidth + pathLength / 2 + extraLength - controlChannelWidth / 2, y + topDistance / 2 + 3 * spacing + controlChannelWidth / 2);\n bottomRight = new paper.Point(x + inWidth + pathLength / 2 + extraLength + controlChannelWidth / 2, y + topDistance / 2);\n control.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n topLeft = new paper.Point(x + inWidth + pathLength / 2 + extraLength - controlChannelWidth, y + topDistance / 2 - controlChannelWidth);\n bottomRight = new paper.Point(x + inWidth + pathLength / 2 + extraLength + controlChannelWidth, y + topDistance / 2 + flowChannelWidth + controlChannelWidth);\n control.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n // control 21\n topLeft = new paper.Point(x + inWidth + pathLength / 2 - extraLength, y + topDistance / 2 + 4 * spacing + controlChannelWidth / 2);\n bottomRight = new paper.Point(x + inWidth + pathLength + extraLength, y + topDistance / 2 + 4 * spacing - controlChannelWidth / 2);\n control.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n topLeft = new paper.Point(x + inWidth + pathLength / 2 - extraLength - controlChannelWidth / 2, y + topDistance / 2 + 4 * spacing + controlChannelWidth / 2);\n bottomRight = new paper.Point(x + inWidth + pathLength / 2 - extraLength + controlChannelWidth / 2, y + topDistance / 2);\n control.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n topLeft = new paper.Point(x + inWidth + pathLength / 2 - extraLength - controlChannelWidth, y + topDistance / 2 - controlChannelWidth);\n bottomRight = new paper.Point(x + inWidth + pathLength / 2 - extraLength + controlChannelWidth, y + topDistance / 2 + flowChannelWidth + controlChannelWidth);\n control.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n // control 22\n topLeft = new paper.Point(x + pathLength / 2, y + topDistance / 2 + 5 * spacing + controlChannelWidth / 2);\n bottomRight = new paper.Point(x + inWidth + pathLength + extraLength, y + topDistance / 2 + 5 * spacing - controlChannelWidth / 2);\n control.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n topLeft = new paper.Point(x + pathLength / 2 - flowChannelWidth / 2 - controlChannelWidth, y + topDistance / 2 + 5 * spacing - controlChannelWidth);\n bottomRight = new paper.Point(x + pathLength / 2 + flowChannelWidth / 2 + controlChannelWidth, y + topDistance / 2 + 5 * spacing + controlChannelWidth);\n control.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n // control 23\n topLeft = new paper.Point(x + pathLength / 2 - extraLength, y + topDistance / 2 + 6 * spacing + controlChannelWidth / 2);\n bottomRight = new paper.Point(x + inWidth + pathLength + extraLength, y + topDistance / 2 + 6 * spacing - controlChannelWidth / 2);\n control.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n topLeft = new paper.Point(x + pathLength / 2 - extraLength - controlChannelWidth / 2, y + topDistance / 2 + 6 * spacing + controlChannelWidth / 2);\n bottomRight = new paper.Point(x + pathLength / 2 - extraLength + controlChannelWidth / 2, y + topDistance / 2);\n control.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n topLeft = new paper.Point(x + pathLength / 2 - extraLength - controlChannelWidth, y + topDistance / 2 - controlChannelWidth);\n bottomRight = new paper.Point(x + pathLength / 2 - extraLength + controlChannelWidth, y + topDistance / 2 + flowChannelWidth + controlChannelWidth);\n control.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n // control 9\n topLeft = new paper.Point(x + 2 * inWidth + pathLength / 2 + extraLength, y - topDistance / 2 + 2 * spacing - controlChannelWidth / 2);\n bottomRight = new paper.Point(x + inWidth + pathLength + extraLength, y - topDistance / 2 + 2 * spacing + controlChannelWidth / 2);\n control.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n topLeft = new paper.Point(x + 2 * inWidth + pathLength / 2 + extraLength - controlChannelWidth / 2, y - topDistance / 2);\n bottomRight = new paper.Point(x + 2 * inWidth + pathLength / 2 + extraLength + controlChannelWidth / 2, y - topDistance / 2 + 2 * spacing + controlChannelWidth / 2);\n control.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n topLeft = new paper.Point(x + 2 * inWidth + pathLength / 2 + extraLength - controlChannelWidth, y - topDistance / 2 - flowChannelWidth - controlChannelWidth);\n bottomRight = new paper.Point(x + 2 * inWidth + pathLength / 2 + extraLength + controlChannelWidth, y - topDistance / 2 + controlChannelWidth);\n control.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n // control 18\n topLeft = new paper.Point(x + 2 * inWidth + pathLength / 2 + extraLength, y + topDistance / 2 - 2 * spacing - controlChannelWidth / 2);\n bottomRight = new paper.Point(x + inWidth + pathLength + extraLength, y + topDistance / 2 - 2 * spacing + controlChannelWidth / 2);\n control.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n topLeft = new paper.Point(x + 2 * inWidth + pathLength / 2 + extraLength - controlChannelWidth / 2, y + topDistance / 2);\n bottomRight = new paper.Point(x + 2 * inWidth + pathLength / 2 + extraLength + controlChannelWidth / 2, y + topDistance / 2 - 2 * spacing - controlChannelWidth / 2);\n control.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n topLeft = new paper.Point(x + 2 * inWidth + pathLength / 2 + extraLength - controlChannelWidth, y + topDistance / 2 - controlChannelWidth);\n bottomRight = new paper.Point(x + 2 * inWidth + pathLength / 2 + extraLength + controlChannelWidth, y + topDistance / 2 + flowChannelWidth + controlChannelWidth);\n control.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n // control 10\n topLeft = new paper.Point(x + pathLength / 2, y - topDistance / 2 + 3 * spacing - controlChannelWidth / 2);\n bottomRight = new paper.Point(x + inWidth + pathLength + extraLength, y - topDistance / 2 + 3 * spacing + controlChannelWidth / 2);\n control.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n topLeft = new paper.Point(x + pathLength / 2 - flowChannelWidth / 2 - controlChannelWidth, y - topDistance / 2 + 3 * spacing - controlChannelWidth);\n bottomRight = new paper.Point(x + pathLength / 2 + flowChannelWidth / 2 + controlChannelWidth, y - topDistance / 2 + 3 * spacing + controlChannelWidth);\n control.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n // control 17\n topLeft = new paper.Point(x + pathLength / 2, y + topDistance / 2 - 3 * spacing - controlChannelWidth / 2);\n bottomRight = new paper.Point(x + inWidth + pathLength + extraLength, y + topDistance / 2 - 3 * spacing + controlChannelWidth / 2);\n control.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n topLeft = new paper.Point(x + pathLength / 2 - flowChannelWidth / 2 - controlChannelWidth, y + topDistance / 2 - 3 * spacing - controlChannelWidth);\n bottomRight = new paper.Point(x + pathLength / 2 + flowChannelWidth / 2 + controlChannelWidth, y + topDistance / 2 - 3 * spacing + controlChannelWidth);\n control.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n // control 11\n topLeft = new paper.Point(x + inWidth + pathLength / 2, y - topDistance / 2 + 4 * spacing - controlChannelWidth / 2);\n bottomRight = new paper.Point(x + inWidth + pathLength + extraLength, y - topDistance / 2 + 4 * spacing + controlChannelWidth / 2);\n control.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n topLeft = new paper.Point(x + inWidth + pathLength / 2 - flowChannelWidth / 2 - controlChannelWidth, y - topDistance / 2 + 4 * spacing - controlChannelWidth);\n bottomRight = new paper.Point(x + inWidth + pathLength / 2 + flowChannelWidth / 2 + controlChannelWidth, y - topDistance / 2 + 4 * spacing + controlChannelWidth);\n control.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n // control 16\n topLeft = new paper.Point(x + inWidth + pathLength / 2, y + topDistance / 2 - 4 * spacing - controlChannelWidth / 2);\n bottomRight = new paper.Point(x + inWidth + pathLength + extraLength, y + topDistance / 2 - 4 * spacing + controlChannelWidth / 2);\n control.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n topLeft = new paper.Point(x + inWidth + pathLength / 2 - flowChannelWidth / 2 - controlChannelWidth, y + topDistance / 2 - 4 * spacing - controlChannelWidth);\n bottomRight = new paper.Point(x + inWidth + pathLength / 2 + flowChannelWidth / 2 + controlChannelWidth, y + topDistance / 2 - 4 * spacing + controlChannelWidth);\n control.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n // control 12\n topLeft = new paper.Point(x + 2 * inWidth + pathLength / 2, y - topDistance / 2 + 5 * spacing - controlChannelWidth / 2);\n bottomRight = new paper.Point(x + inWidth + pathLength + extraLength, y - topDistance / 2 + 5 * spacing + controlChannelWidth / 2);\n control.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n topLeft = new paper.Point(x + 2 * inWidth + pathLength / 2 - flowChannelWidth - controlChannelWidth, y - topDistance / 2 + 5 * spacing - controlChannelWidth);\n bottomRight = new paper.Point(x + 2 * inWidth + pathLength / 2 + controlChannelWidth, y - topDistance / 2 + 5 * spacing + controlChannelWidth);\n control.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n // control 15\n topLeft = new paper.Point(x + 2 * inWidth + pathLength / 2, y + topDistance / 2 - 5 * spacing - controlChannelWidth / 2);\n bottomRight = new paper.Point(x + inWidth + pathLength + extraLength, y + topDistance / 2 - 5 * spacing + controlChannelWidth / 2);\n control.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n topLeft = new paper.Point(x + 2 * inWidth + pathLength / 2 - flowChannelWidth - controlChannelWidth, y + topDistance / 2 - 5 * spacing - controlChannelWidth);\n bottomRight = new paper.Point(x + 2 * inWidth + pathLength / 2 + controlChannelWidth, y + topDistance / 2 - 5 * spacing + controlChannelWidth);\n control.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n // control 13\n topLeft = new paper.Point(x + inWidth + pathLength / 2 - extraLength, y - topDistance / 2 + 6 * spacing - controlChannelWidth / 2);\n bottomRight = new paper.Point(x + inWidth + pathLength + extraLength, y - topDistance / 2 + 6 * spacing + controlChannelWidth / 2);\n control.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n topLeft = new paper.Point(x + inWidth + pathLength / 2 - extraLength - controlChannelWidth / 2, y - topDistance / 2 + 6 * spacing - controlChannelWidth / 2);\n bottomRight = new paper.Point(x + inWidth + pathLength / 2 - extraLength + controlChannelWidth / 2, y + controlChannelWidth / 2);\n control.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n topLeft = new paper.Point(x + inWidth + pathLength / 2 - extraLength - controlChannelWidth, y - flowChannelWidth / 2 - controlChannelWidth);\n bottomRight = new paper.Point(x + inWidth + pathLength / 2 - extraLength + controlChannelWidth, y + flowChannelWidth / 2 + controlChannelWidth);\n control.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n // control 14\n topLeft = new paper.Point(x + inWidth + pathLength / 2 + extraLength, y + topDistance / 2 - 6 * spacing - controlChannelWidth / 2);\n bottomRight = new paper.Point(x + inWidth + pathLength + extraLength, y + topDistance / 2 - 6 * spacing + controlChannelWidth / 2);\n control.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n topLeft = new paper.Point(x + inWidth + pathLength / 2 + extraLength - controlChannelWidth / 2, y);\n bottomRight = new paper.Point(x + inWidth + pathLength / 2 + extraLength + controlChannelWidth / 2, y + topDistance / 2 - 6 * spacing + controlChannelWidth / 2);\n control.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n topLeft = new paper.Point(x + inWidth + pathLength / 2 + extraLength - controlChannelWidth, y - flowChannelWidth / 2 - controlChannelWidth);\n bottomRight = new paper.Point(x + inWidth + pathLength / 2 + extraLength + controlChannelWidth, y + flowChannelWidth / 2 + controlChannelWidth);\n control.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n control.fillColor = color;\n control.rotate(rotation, new paper.Point(x, y));\n\n return control;\n }\n\n getPorts(params: { [k: string]: any }) {\n const ports = [];\n const chamberWidth = params.chamberWidth;\n const flowChannelWidth = params.flowChannelWidth;\n const controlChannelWidth = params.controlChannelWidth;\n const portRadius = params.portRadius;\n const chamberLength = params.chamberLength;\n const rotation = params.rotation;\n const spacing = params.componentSpacing;\n\n const topDistance = 14 * spacing;\n const inWidth = 5 * spacing;\n const pathLength = 20 * spacing;\n\n const extraLength = 2 * spacing;\n\n // flow\n ports.push(new ComponentPort(0, -topDistance, \"1\", LogicalLayerType.FLOW));\n ports.push(new ComponentPort(0, 0, \"2\", LogicalLayerType.FLOW));\n ports.push(new ComponentPort(0, topDistance, \"3\", LogicalLayerType.FLOW));\n\n // control\n ports.push(new ComponentPort(inWidth + pathLength + extraLength, -topDistance / 2 - 6 * spacing, \"4\", LogicalLayerType.CONTROL));\n ports.push(new ComponentPort(inWidth + pathLength + extraLength, -topDistance / 2 - 5 * spacing, \"5\", LogicalLayerType.CONTROL));\n ports.push(new ComponentPort(inWidth + pathLength + extraLength, -topDistance / 2 - 4 * spacing, \"6\", LogicalLayerType.CONTROL));\n ports.push(new ComponentPort(inWidth + pathLength + extraLength, -topDistance / 2 - 3 * spacing, \"7\", LogicalLayerType.CONTROL));\n ports.push(new ComponentPort(inWidth + pathLength + extraLength, -topDistance / 2 - 2 * spacing, \"8\", LogicalLayerType.CONTROL));\n ports.push(new ComponentPort(inWidth + pathLength + extraLength, -topDistance / 2 + 2 * spacing, \"9\", LogicalLayerType.CONTROL));\n ports.push(new ComponentPort(inWidth + pathLength + extraLength, -topDistance / 2 + 3 * spacing, \"10\", LogicalLayerType.CONTROL));\n ports.push(new ComponentPort(inWidth + pathLength + extraLength, -topDistance / 2 + 4 * spacing, \"11\", LogicalLayerType.CONTROL));\n ports.push(new ComponentPort(inWidth + pathLength + extraLength, -topDistance / 2 + 5 * spacing, \"12\", LogicalLayerType.CONTROL));\n ports.push(new ComponentPort(inWidth + pathLength + extraLength, -topDistance / 2 + 6 * spacing, \"13\", LogicalLayerType.CONTROL));\n ports.push(new ComponentPort(inWidth + pathLength + extraLength, topDistance / 2 - 6 * spacing, \"14\", LogicalLayerType.CONTROL));\n ports.push(new ComponentPort(inWidth + pathLength + extraLength, topDistance / 2 - 5 * spacing, \"15\", LogicalLayerType.CONTROL));\n ports.push(new ComponentPort(inWidth + pathLength + extraLength, topDistance / 2 - 4 * spacing, \"16\", LogicalLayerType.CONTROL));\n ports.push(new ComponentPort(inWidth + pathLength + extraLength, topDistance / 2 - 3 * spacing, \"17\", LogicalLayerType.CONTROL));\n ports.push(new ComponentPort(inWidth + pathLength + extraLength, topDistance / 2 - 2 * spacing, \"18\", LogicalLayerType.CONTROL));\n ports.push(new ComponentPort(inWidth + pathLength + extraLength, topDistance / 2 + 2 * spacing, \"19\", LogicalLayerType.CONTROL));\n ports.push(new ComponentPort(inWidth + pathLength + extraLength, topDistance / 2 + 3 * spacing, \"20\", LogicalLayerType.CONTROL));\n ports.push(new ComponentPort(inWidth + pathLength + extraLength, topDistance / 2 + 4 * spacing, \"21\", LogicalLayerType.CONTROL));\n ports.push(new ComponentPort(inWidth + pathLength + extraLength, topDistance / 2 + 5 * spacing, \"22\", LogicalLayerType.CONTROL));\n ports.push(new ComponentPort(inWidth + pathLength + extraLength, topDistance / 2 + 6 * spacing, \"23\", LogicalLayerType.CONTROL));\n ports.push(new ComponentPort(inWidth / 3, -topDistance - topDistance / 2 - extraLength, \"24\", LogicalLayerType.CONTROL));\n ports.push(new ComponentPort((2 * inWidth) / 3, -topDistance - topDistance / 2 - extraLength, \"25\", LogicalLayerType.CONTROL));\n ports.push(new ComponentPort(inWidth / 3, topDistance + topDistance / 2 + extraLength, \"26\", LogicalLayerType.CONTROL));\n\n return ports;\n }\n\n __drawCell(params: { [k: string]: any }) {\n const x = params.position[0];\n const y = params.position[1];\n const color = params.color;\n const spacing = params.componentSpacing;\n const chamberWidth = params.chamberWidth;\n const flowChannelWidth = params.flowChannelWidth;\n const controlChannelWidth = params.controlChannelWidth;\n const portRadius = params.portRadius;\n const chamberLength = params.chamberLength;\n const rotation = params.rotation;\n\n const ret = new paper.CompoundPath(\"\");\n const topDistance = 14 * spacing;\n const inWidth = 5 * spacing;\n const pathLength = 20 * spacing;\n\n const extraLength = 2 * spacing;\n\n const cell = new paper.CompoundPath(\"\");\n\n // top left\n let topLeft = new paper.Point(x + pathLength / 2 - chamberWidth / 2, y - topDistance / 2 - chamberLength / 2 - flowChannelWidth / 2);\n let bottomRight = new paper.Point(x + pathLength / 2 + chamberWidth / 2, y - topDistance / 2 + chamberLength / 2 - flowChannelWidth / 2);\n cell.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n // top right\n topLeft = new paper.Point(x + 2 * inWidth + pathLength / 2 - chamberWidth / 2 - flowChannelWidth / 2, y - topDistance / 2 - chamberLength / 2 - flowChannelWidth / 2);\n bottomRight = new paper.Point(x + 2 * inWidth + pathLength / 2 + chamberWidth / 2 - flowChannelWidth / 2, y - topDistance / 2 + chamberLength / 2 - flowChannelWidth / 2);\n cell.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n // bottom left\n topLeft = new paper.Point(x + pathLength / 2 - chamberWidth / 2, y + topDistance / 2 - chamberLength / 2 + flowChannelWidth / 2);\n bottomRight = new paper.Point(x + pathLength / 2 + chamberWidth / 2, y + topDistance / 2 + chamberLength / 2 + flowChannelWidth / 2);\n cell.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n // top right\n topLeft = new paper.Point(x + 2 * inWidth + pathLength / 2 - chamberWidth / 2 - flowChannelWidth / 2, y + topDistance / 2 - chamberLength / 2 + flowChannelWidth / 2);\n bottomRight = new paper.Point(x + 2 * inWidth + pathLength / 2 + chamberWidth / 2 - flowChannelWidth / 2, y + topDistance / 2 + chamberLength / 2 + flowChannelWidth / 2);\n cell.addChild(new paper.Path.Rectangle(topLeft, bottomRight));\n\n cell.fillColor = color;\n cell.rotate(rotation, new paper.Point(x, y));\n\n return cell;\n }\n\n render2DTarget(key: string | null, params: { [k: string]: any }) {\n const render = this.__drawFlow(params);\n render.addChild(this.__drawControl(params));\n render.addChild(this.__drawCell(params));\n\n render.fillColor!.alpha = 0.5;\n return render;\n }\n}\n","import Template from \"./template\";\nimport paper from \"paper\";\nimport ComponentPort from \"../core/componentPort\";\nimport { Path, Point } from \"paper/dist/paper-core\";\n// import { LogicalLayerType, ToolPaperObject } from \"../core/init\";\nimport { LogicalLayerType } from \"../core/init\";\n\nexport default class ToroidalMixer extends Template {\n constructor() {\n super();\n }\n\n __setupDefinitions(): void {\n this.__unique = {\n position: \"Point\"\n };\n\n this.__heritable = {\n componentSpacing: \"Float\",\n neckAngle: \"Float\",\n neckLength: \"Float\",\n neckWidth: \"Float\",\n numberOfMixers: \"Float\",\n channelWidth: \"Float\",\n innerDiameter: \"Float\",\n rotation: \"Float\",\n height: \"Float\"\n };\n\n this.__defaults = {\n componentSpacing: 1000,\n rotation: 0,\n channelWidth: 0.8 * 1000,\n neckAngle: 120,\n neckLength: 1000,\n neckWidth: 800,\n numberOfMixers: 1,\n innerDiameter: 2.46 * 1000,\n height: 250\n };\n\n this.__units = {\n componentSpacing: \"μm\",\n rotation: \"°\",\n neckAngle: \"°\",\n neckLength: \"μm\",\n neckWidth: \"μm\",\n numberOfMixers: \"\",\n channelWidth: \"μm\",\n innerDiameter: \"μm\",\n height: \"μm\"\n };\n\n this.__minimum = {\n componentSpacing: 0,\n rotation: 0,\n channelWidth: 10,\n neckAngle: 0,\n neckLength: 0,\n neckWidth: 10,\n numberOfMixers: 1,\n innerDiameter: 10,\n height: 10\n };\n\n this.__maximum = {\n componentSpacing: 10000,\n rotation: 360,\n channelWidth: 2000,\n neckAngle: 360,\n neckLength: 10000,\n neckWidth: 2000,\n numberOfMixers: 20,\n innerDiameter: 12 * 1000,\n height: 1200\n };\n\n this.__featureParams = {\n componentSpacing: \"componentSpacing\",\n position: \"position\",\n channelWidth: \"channelWidth\",\n neckAngle: \"neckAngle\",\n neckLength: \"neckLength\",\n neckWidth: \"neckWidth\",\n numberOfMixers: \"numberOfMixers\",\n rotation: \"rotation\",\n innerDiameter: \"innerDiameter\"\n };\n\n this.__targetParams = {\n componentSpacing: \"componentSpacing\",\n channelWidth: \"channelWidth\",\n neckAngle: \"neckAngle\",\n neckLength: \"neckLength\",\n neckWidth: \"neckWidth\",\n numberOfMixers: \"numberOfMixers\",\n rotation: \"rotation\",\n innerDiameter: \"innerDiameter\"\n };\n\n this.__placementTool = \"componentPositionTool\";\n\n this.__toolParams = {\n position: \"position\"\n };\n\n this.__renderKeys = [\"FLOW\"];\n\n this.__mint = \"TOROIDAL MIXER\";\n\n this.__zOffsetKeys = {\n FLOW: \"height\"\n };\n\n this.__substrateOffset = {\n FLOW: \"0\"\n };\n }\n\n getPorts(params: { [index: string]: any }) {\n const y: number = params.position[1];\n const channelWidth: number = params.channelWidth;\n const innerDiameter: number = params.innerDiameter;\n const neckLength: number = params.neckLength;\n const neckAngle: number = params.neckAngle;\n const numberOfMixers: number = params.numberOfMixers;\n const y_center: number = y + Math.abs((neckLength + channelWidth + 0.5 * innerDiameter) * Math.sin((0.5 * neckAngle * Math.PI) / 180));\n const diameter: number = 2 * (y_center - y);\n const y_neckComponent: number = neckLength * Math.sin((0.5 * neckAngle * Math.PI) / 180);\n\n const ports: Array = [];\n\n ports.push(new ComponentPort(0, 0, \"1\", LogicalLayerType.FLOW));\n\n if (numberOfMixers % 2 == 1) {\n ports.push(\n new ComponentPort(\n 0,\n (numberOfMixers - 1) * diameter - (numberOfMixers - 2) * y_neckComponent + diameter - neckLength * Math.sin((0.5 * neckAngle * Math.PI) / 180),\n \"2\",\n LogicalLayerType.FLOW\n )\n );\n } else {\n ports.push(\n new ComponentPort(\n -1 * neckLength * Math.cos((0.5 * neckAngle * Math.PI) / 180),\n (numberOfMixers - 1) * diameter - (numberOfMixers - 2) * y_neckComponent + diameter - neckLength * Math.sin((0.5 * neckAngle * Math.PI) / 180),\n \"2\",\n LogicalLayerType.FLOW\n )\n );\n }\n\n return ports;\n }\n\n render2D(params: { [index: string]: any }, key: string): paper.CompoundPath {\n const channelWidth: number = params.channelWidth;\n const innerDiameter: number = params.innerDiameter;\n const neckAngle: number = params.neckAngle;\n const neckWidth: number = params.neckWidth;\n const rotation: number = params.rotation;\n const neckLength: number = params.neckLength;\n const numMixers: number = params.numberOfMixers;\n const x: number = params.position[0];\n const y: number = params.position[1];\n const color: any = params.color;\n const serp: paper.CompoundPath = new paper.CompoundPath([]);\n const x_center: number = x - (neckLength + channelWidth + 0.5 * innerDiameter) * Math.cos((0.5 * neckAngle * Math.PI) / 180);\n const y_center: number = y + Math.abs((neckLength + channelWidth + 0.5 * innerDiameter) * Math.sin((0.5 * neckAngle * Math.PI) / 180));\n const center: paper.Point = new paper.Point(x_center, y_center);\n const diameter: number = 2 * (y_center - y);\n const y_neckComponent: number = neckLength * Math.sin((0.5 * neckAngle * Math.PI) / 180);\n\n let mixerUnit: paper.PathItem;\n\n //Initial ring\n let outerCircle: paper.Path = new paper.Path.Circle(center, 0.5 * innerDiameter + channelWidth);\n let innerCircle: paper.Path = new paper.Path.Circle(center, 0.5 * innerDiameter);\n mixerUnit = outerCircle.subtract(innerCircle);\n //Initial neck\n let neck: paper.Path = new paper.Path.Rectangle(new paper.Point(x - neckLength - channelWidth, y - 0.5 * neckWidth), new paper.Size(neckLength + channelWidth, neckWidth));\n neck.rotate((-1 * neckAngle) / 2, new paper.Point(x, y));\n mixerUnit = mixerUnit.unite(neck);\n //Trailing neck\n neck = new paper.Path.Rectangle(new paper.Point(x - neckLength - channelWidth, y - 0.5 * neckWidth + diameter), new paper.Size(neckLength + channelWidth, neckWidth));\n neck.rotate(neckAngle / 2, new paper.Point(x, y + diameter));\n mixerUnit = mixerUnit.unite(neck);\n\n let y_val: number;\n let x_centerAnalog: number;\n let y_centerAnalog: number;\n let centerAnalog: paper.Point;\n let numRepeats: number = numMixers - 1;\n for (let i = 1; i <= numRepeats; i++) {\n y_val = y + i * diameter - (i - 1) * y_neckComponent;\n if (i % 2 == 1) {\n x_centerAnalog = x + (channelWidth + 0.5 * innerDiameter) * Math.cos((0.5 * neckAngle * Math.PI) / 180);\n y_centerAnalog = y_val + Math.abs((channelWidth + 0.5 * innerDiameter) * Math.sin((0.5 * neckAngle * Math.PI) / 180));\n centerAnalog = new paper.Point(x_centerAnalog, y_centerAnalog);\n //Add next ring\n outerCircle = new paper.Path.Circle(centerAnalog, 0.5 * innerDiameter + channelWidth);\n innerCircle = new paper.Path.Circle(centerAnalog, 0.5 * innerDiameter);\n mixerUnit = mixerUnit.unite(outerCircle.subtract(innerCircle));\n //Complete inter-ring connection\n neck = new paper.Path.Rectangle(new paper.Point(x, y_val - 0.5 * neckWidth), new paper.Size(channelWidth, neckWidth));\n neck.rotate(neckAngle / 2, new paper.Point(x, y_val));\n mixerUnit = mixerUnit.unite(neck);\n //Add trailing neck\n neck = new paper.Path.Rectangle(\n new paper.Point(x - neckLength, y_val - 0.5 * neckWidth + (2 * channelWidth + innerDiameter) * Math.sin((0.5 * neckAngle * Math.PI) / 180)),\n new paper.Size(neckLength + channelWidth, neckWidth)\n );\n neck.rotate((-1 * neckAngle) / 2, new paper.Point(x, y_val + (2 * channelWidth + innerDiameter) * Math.sin((0.5 * neckAngle * Math.PI) / 180)));\n mixerUnit = mixerUnit.unite(neck);\n } else {\n y_centerAnalog = y_val + Math.abs((channelWidth + 0.5 * innerDiameter) * Math.sin((0.5 * neckAngle * Math.PI) / 180));\n centerAnalog = new paper.Point(x_center, y_centerAnalog);\n //Add next ring\n outerCircle = new paper.Path.Circle(centerAnalog, 0.5 * innerDiameter + channelWidth);\n innerCircle = new paper.Path.Circle(centerAnalog, 0.5 * innerDiameter);\n mixerUnit = mixerUnit.unite(outerCircle.subtract(innerCircle));\n //Complete inter-ring connection\n neck = new paper.Path.Rectangle(\n new paper.Point(x - channelWidth - neckLength * Math.cos((0.5 * neckAngle * Math.PI) / 180), y_val - 0.5 * neckWidth),\n new paper.Size(channelWidth, neckWidth)\n );\n neck.rotate((-1 * neckAngle) / 2, new paper.Point(x - neckLength * Math.cos((0.5 * neckAngle * Math.PI) / 180), y_val));\n mixerUnit = mixerUnit.unite(neck);\n //Add trailing neck\n neck = new paper.Path.Rectangle(\n new paper.Point(x - neckLength - channelWidth, y_val - 0.5 * neckWidth + diameter - neckLength * Math.sin((0.5 * neckAngle * Math.PI) / 180)),\n new paper.Size(neckLength + channelWidth, neckWidth)\n );\n neck.rotate(neckAngle / 2, new paper.Point(x, y_val + diameter - neckLength * Math.sin((0.5 * neckAngle * Math.PI) / 180)));\n mixerUnit = mixerUnit.unite(neck);\n }\n }\n serp.addChild(mixerUnit);\n serp.fillColor = color;\n serp.rotate(rotation, new paper.Point(x, y));\n return serp;\n }\n\n render2DTarget(key: string | null, params: { [index: string]: any }): paper.CompoundPath {\n if (key === null) {\n key = this.__renderKeys[0];\n }\n const render = this.render2D(params, key);\n if (render.fillColor !== null) render.fillColor.alpha = 0.5;\n return render;\n }\n}\n","import Template from \"./template\";\nimport paper from \"paper\";\nimport ComponentPort from \"../core/componentPort\";\nimport { LogicalLayerType } from \"../core/init\";\n\nexport default class DogboneInsert extends Template {\n constructor() {\n super();\n }\n\n __setupDefinitions(): void {\n this.__unique = {\n position: \"Point\"\n };\n\n this.__heritable = {\n componentSpacing: \"Float\",\n rotation: \"Float\",\n length: \"Float\",\n innerRadius: \"Float\",\n outerRadius: \"Float\",\n height: \"Float\"\n };\n\n this.__defaults = {\n componentSpacing: 1000,\n rotation: 0,\n innerRadius: 400,\n outerRadius: 800,\n length: 7200,\n height: 250\n };\n\n this.__units = {\n componentSpacing: \"μm\",\n rotation: \"°\",\n length: \"μm\",\n innerRadius: \"μm\",\n outerRadius: \"μm\",\n height: \"μm\"\n };\n\n this.__minimum = {\n componentSpacing: 0,\n innerRadius: 1,\n outerRadius: 1,\n length: 120,\n height: 10,\n rotation: 0\n };\n\n this.__maximum = {\n componentSpacing: 10000,\n innerRadius: 1000,\n outerRadius: 1000,\n length: 24 * 1000,\n height: 1200,\n rotation: 360\n };\n\n this.__featureParams = {\n componentSpacing: \"componentSpacing\",\n position: \"position\",\n rotation: \"rotation\",\n length: \"length\",\n innerRadius: \"innerRadius\",\n outerRadius: \"outerRadius\",\n };\n\n this.__targetParams = {\n componentSpacing: \"componentSpacing\",\n length: \"length\",\n innerRadius: \"innerRadius\",\n outerRadius: \"outerRadius\",\n rotation: \"rotation\"\n };\n\n this.__placementTool = \"componentPositionTool\";\n\n this.__toolParams = {\n position: \"position\"\n };\n\n this.__renderKeys = [\"FLOW\"];\n\n this.__mint = \"DOGBONE INSERT\";\n\n this.__zOffsetKeys = {\n FLOW: \"height\"\n };\n\n this.__substrateOffset = {\n FLOW: \"0\"\n };\n }\n\n getPorts(params: { [k: string]: any }) {\n const l = params.length;\n\n const ports = [];\n\n ports.push(new ComponentPort(-l / 2, 0, \"1\", LogicalLayerType.FLOW));\n\n ports.push(new ComponentPort(l / 2, 0, \"2\", LogicalLayerType.FLOW));\n\n return ports;\n }\n\n render2D(params: { [k: string]: any }, key: string): paper.CompoundPath {\n const position = params.position;\n const px = position[0];\n const py = position[1];\n const length = params.length;\n const innerRadius = params.innerRadius;\n const outerRadius = params.outerRadius;\n const rotation = params.rotation;\n const color = params.color;\n\n const fulllength = length + innerRadius * 2 + outerRadius * 2;\n const width = innerRadius * 2 + outerRadius * 4;\n\n const serp: paper.CompoundPath = new paper.CompoundPath([]);\n\n let insert = new paper.PathItem;\n\n // Produce rectangle\n const rect2 = new paper.Path.Rectangle(new paper.Point(px - fulllength / 2 + outerRadius, py - width / 2), new paper.Size(fulllength - 2 * outerRadius, width));\n \n // Add half circles to ends\n // Left side\n let curve: paper.Path.Arc | paper.PathItem = new paper.Path.Arc({\n from: [px - fulllength / 2 + outerRadius, py + width / 2],\n through: [px - fulllength / 2, py + width / 2 - outerRadius],\n to: [px - fulllength / 2 + outerRadius, py + innerRadius]\n });\n (curve as any).closed = true;\n insert = rect2.unite(curve);\n curve = new paper.Path.Arc({\n from: [px - fulllength / 2 + outerRadius, py - width / 2],\n through: [px - fulllength / 2, py - width / 2 + outerRadius],\n to: [px - fulllength / 2 + outerRadius, py - innerRadius]\n });\n (curve as any).closed = true;\n insert = insert.unite(curve);\n //Right side\n curve = new paper.Path.Arc({\n from: [px + fulllength / 2 - outerRadius, py + width / 2],\n through: [px + fulllength / 2, py + width / 2 - outerRadius],\n to: [px + fulllength / 2 - outerRadius, py + innerRadius]\n });\n (curve as any).closed = true;\n insert = insert.unite(curve);\n curve = new paper.Path.Arc({\n from: [px + fulllength / 2 - outerRadius, py - width / 2],\n through: [px + fulllength / 2, py - width / 2 + outerRadius],\n to: [px + fulllength / 2 - outerRadius, py - innerRadius]\n });\n (curve as any).closed = true;\n insert = insert.unite(curve);\n \n // Subtract half circles\n curve = new paper.Path.Arc({\n from: [px - fulllength / 2 + outerRadius, py + innerRadius],\n through: [px - fulllength / 2 + innerRadius + outerRadius, py],\n to: [px - fulllength / 2 + outerRadius, py - innerRadius]\n });\n (curve as any).closed = true;\n insert = insert.subtract(curve);\n curve = new paper.Path.Arc({\n from: [px + fulllength / 2 - outerRadius, py + innerRadius],\n through: [px + fulllength / 2 - innerRadius - outerRadius, py],\n to: [px + fulllength / 2 - outerRadius, py - innerRadius]\n });\n (curve as any).closed = true;\n insert = insert.subtract(curve);\n\n serp.addChild(insert);\n serp.fillColor = color;\n serp.rotate(rotation, new paper.Point(px, py));\n return serp;\n }\n\n render2DTarget(key: string | null, params: { [k: string]: any }): paper.CompoundPath {\n if (key === null) {\n key = this.__renderKeys[0];\n }\n const render = this.render2D(params, key);\n render.fillColor!.alpha = 0.5;\n return render;\n }\n}\n","\nimport ComponentPort from \"../../core/componentPort\";\nimport { GeometricOperationType, ToolPaperObject } from \"../../core/init\";\nimport paper from \"paper\";\n//import { ManufacturingInfo } from \"../manufacturing/ManufacturingInfo\";\nimport { LogicalLayerType } from \"../../core/init\";\nimport {PRIMITIVES_SERVER} from \"../../../componentAPI\";\n\nexport default class FeatureTemplate {\n\n protected _macro: string = \"FeatureTemplate\";\n protected _geometricOperation: GeometricOperationType = GeometricOperationType.UNION;\n protected __unique: { [key: string]: string } | null = null;\n protected __heritable: { [key: string]: string } | null = null;\n protected __defaults: { [key: string]: number } | null = null;\n protected __minimum: { [key: string]: number } | null = null;\n protected __maximum: { [key: string]: number } | null = null;\n protected __units: { [key: string]: string } | null = null;\n protected __toolParams: { [key: string]: string } | null = null; // { position: \"position\" };\n protected __featureParams: { [key: string]: string } | null = null;\n protected __targetParams: { [key: string]: string } | null = null;\n protected __zOffsetKeys: { [key: string]: string } | null = null;\n protected __substrateOffset: { [key: string]: string } | null = null;\n\n\n /**\n *Creates an instance of Template.\n * @memberof Template\n */\n constructor() {\n this.__setupDefinitions();\n this.__checkDefinitions();\n }\n\n __setupDefinitions(): void {\n //Throw an error if this function is not implemented\n throw new Error(\"Method not implemented.\");\n }\n\n __checkDefinitions(): void {\n //Check that all the definitions are set\n if (this._macro === null) {\n throw new Error(\"Macro not defined: \" + this._macro);\n }\n if (this.__unique === null) {\n throw new Error(\"Unique parameters not defined: \" + this._macro);\n }\n if (this.__heritable === null) {\n throw new Error(\"Heritable parameters not defined: \" + this._macro);\n }\n if (this.__defaults === null) {\n throw new Error(\"Default parameters not defined: \" + this._macro);\n }\n if (this.__minimum === null) {\n throw new Error(\"Minimum parameters not defined: \" + this._macro);\n }\n if (this.__maximum === null) {\n throw new Error(\"Maximum parameters not defined: \" + this._macro);\n }\n if (this.__units === null) {\n throw new Error(\"Units not defined: \" + this._macro);\n }\n if (this.__toolParams === null) {\n throw new Error(\"Tool parameters not defined: \" + this._macro);\n }\n if (this.__featureParams === null) {\n throw new Error(\"Feature parameters not defined: \" + this._macro);\n }\n if (this.__targetParams === null) {\n throw new Error(\"Target parameters not defined: \" + this._macro);\n }\n }\n\n /**\n * Get the Macro parameters for the feature\n *\n * @type {GeometricOperationType}\n * @memberof FeatureTemplate\n */\n get geometricOperation(): GeometricOperationType {\n return this._geometricOperation;\n }\n\n /**\n * Get the Macro parameters for the feature\n * \n * @type {string}\n * @memberof FeatureTemplate\n */\n get macro(): string {\n return this._macro;\n }\n\n render2d(params: { [key: string]: any }): ToolPaperObject {\n //Throw an error if this function is not implemented\n throw new Error(\"Method not implemented.\");\n }\n\n}\n\n","import { GeometricOperationType } from \"@/app/core/init\";\nimport FeatureTemplate from \"./featureTemplate\";\n\nexport default class NormallyClosedValveCrescents extends FeatureTemplate {\n constructor() {\n super();\n }\n\n __setupDefinitions(): void {\n this._macro = \"VALVE3D FLOW\";\n\n this.__unique = {\n position: \"Point\"\n };\n\n this.__heritable = {\n componentSpacing: \"Float\",\n rotation: \"Float\",\n valveRadius: \"Float\",\n height: \"Float\",\n gap: \"Float\",\n width: \"Float\",\n length: \"Float\"\n };\n\n this.__defaults = {\n componentSpacing: 1000,\n rotation: 0,\n valveRadius: 1.2 * 1000,\n height: 250,\n gap: 0.6 * 1000,\n width: 2.4 * 1000,\n length: 2.4 * 1000\n };\n\n this.__units = {\n componentSpacing: \"μm\",\n valveRadius: \"μm\",\n height: \"μm\",\n gap: \"μm\",\n width: \"μm\",\n length: \"μm\",\n rotation: \"°\"\n };\n\n this.__minimum = {\n componentSpacing: 0,\n valveRadius: 0.1 * 100,\n height: 0.1 * 100,\n gap: 0.5 * 10,\n rotation: 0,\n width: 10,\n length: 10\n };\n\n this.__maximum = {\n componentSpacing: 10000,\n valveRadius: 0.3 * 10000,\n height: 1.2 * 1000,\n gap: 0.1 * 10000,\n rotation: 180,\n width: 3 * 1000,\n length: 3 * 1000\n };\n\n this.__featureParams = {\n componentSpacing: \"componentSpacing\",\n position: \"position\",\n rotation: \"rotation\",\n radius1: \"valveRadius\",\n radius2: \"valveRadius\",\n valveRadius: \"valveRadius\",\n gap: \"gap\"\n };\n\n this.__targetParams = {\n componentSpacing: \"componentSpacing\",\n position: \"position\",\n rotation: \"rotation\",\n radius1: \"valveRadius\",\n radius2: \"valveRadius\",\n valveRadius: \"valveRadius\",\n gap: \"gap\"\n };\n\n\n this.__toolParams = {\n position: \"position\"\n };\n\n this._geometricOperation = GeometricOperationType.UNION;\n // TODO: Setup the manufacuring info for this feature\n }\n\n}","import { GeometricOperationType } from \"@/app/core/init\";\nimport FeatureTemplate from \"./featureTemplate\";\n\nexport default class NormallyClosedValveModificationsGap extends FeatureTemplate {\n constructor() {\n super();\n }\n\n __setupDefinitions(): void {\n this._macro = \"VALVE3D GAP\";\n\n this.__unique = {\n position: \"Point\"\n };\n\n this.__heritable = {\n componentSpacing: \"Float\",\n rotation: \"Float\",\n valveRadius: \"Float\",\n height: \"Float\",\n gap: \"Float\",\n width: \"Float\",\n length: \"Float\"\n };\n\n this.__defaults = {\n componentSpacing: 1000,\n rotation: 0,\n valveRadius: 1.2 * 1000,\n height: 250,\n gap: 0.6 * 1000,\n width: 2.4 * 1000,\n length: 2.4 * 1000\n };\n\n this.__units = {\n componentSpacing: \"μm\",\n valveRadius: \"μm\",\n height: \"μm\",\n gap: \"μm\",\n width: \"μm\",\n length: \"μm\",\n rotation: \"°\"\n };\n\n this.__minimum = {\n componentSpacing: 0,\n valveRadius: 0.1 * 100,\n height: 0.1 * 100,\n gap: 0.5 * 10,\n rotation: 0,\n width: 10,\n length: 10\n\n };\n\n this.__maximum = {\n componentSpacing: 10000,\n valveRadius: 0.3 * 10000,\n height: 1.2 * 1000,\n gap: 0.1 * 10000,\n rotation: 180,\n width: 3 * 1000,\n length: 3 * 1000\n };\n\n this.__featureParams = {\n componentSpacing: \"componentSpacing\",\n position: \"position\",\n rotation: \"rotation\",\n radius1: \"valveRadius\",\n radius2: \"valveRadius\",\n valveRadius: \"valveRadius\",\n gap: \"gap\"\n };\n\n this.__targetParams = {\n componentSpacing: \"componentSpacing\",\n position: \"position\",\n rotation: \"rotation\",\n radius1: \"valveRadius\",\n radius2: \"valveRadius\",\n valveRadius: \"valveRadius\",\n gap: \"gap\"\n };\n\n this.__toolParams = {\n position: \"position\"\n };\n\n this._geometricOperation = GeometricOperationType.DIFFERENCE;\n // TODO: Setup the manufacuring info for this feature\n }\n\n}","import Text from \"./app/library/text\";\nimport Port from \"./app/library/port\";\nimport Anode from \"./app/library/anode\"; // new from CK\nimport Cathode from \"./app/library/cathode\"; // new from CK\nimport Channel from \"./app/library/channel\";\nimport BetterMixer from \"./app/library/betterMixer\";\nimport RotaryMixer from \"./app/library/rotaryMixer\";\nimport AlignmentMarks from \"./app/library/alignmentMarks\";\nimport CellTrapL from \"./app/library/celltrapL\";\nimport Gelchannel from \"./app/library/gelchannel\"; // CK\nimport Chamber from \"./app/library/chamber\";\nimport Connection from \"./app/library/connection\";\nimport CurvedMixer from \"./app/library/curvedMixer\";\nimport DiamondReactionChamber from \"./app/library/diamondReactionChamber\";\nimport DropletGenerator from \"./app/library/dropletGenerator\";\nimport GradientGenerator from \"./app/library/gradientGenerator\";\nimport Mux from \"./app/library/mux\";\nimport Pump from \"./app/library/pump\";\nimport Pump3D from \"./app/library/pump3D\";\nimport RoundedChannel from \"./app/library/roundedChannel\";\nimport thermoCycler from \"./app/library/thermoCycler\";\nimport Transition from \"./app/library/transition\";\nimport Transposer from \"./app/library/transposer\";\nimport Valve from \"./app/library/valve\";\nimport Valve3D from \"./app/library/valve3D\";\nimport Tree from \"./app/library/tree\";\nimport YTree from \"./app/library/ytree\";\nimport LLChamber from \"./app/library/llChamber\";\nimport ThreeDMixer from \"./app/library/threeDMixer\";\nimport Via from \"./app/library/via\";\n\n// new\n\nimport Filter from \"./app/library/filter\";\nimport CellTrapS from \"./app/library/celltrapS\";\nimport ThreeDMux from \"./app/library/threeDMux\";\nimport ChemostatRing from \"./app/library/chemostatring\";\nimport Incubation from \"./app/library/incubation\";\nimport Merger from \"./app/library/merger\";\nimport PicoInjection from \"./app/library/picoinjection\";\nimport Sorter from \"./app/library/sorter\";\nimport CapacitanceSensor from \"./app/library/capacitancesensor\";\nimport Splitter from \"./app/library/splitter\";\nimport Node from \"./app/library/node\";\nimport DropletGeneratorT from \"./app/library/dropletGeneratorT\";\nimport DropletGeneratorFlowFocus from \"./app/library/dropletGeneratorFlowFocus\";\nimport LogicArray from \"./app/library/logicArray\";\nimport ToroidalMixer from \"./app/library/toroidalMixer\";\nimport DogboneInsert from \"./app/library/dogboneInsert\";\n\nimport Template from \"./app/library/template\";\nimport ComponentPort from \"./app/core/componentPort\";\nimport CustomComponent from \"./app/core/customComponent\";\nimport uuid from \"node-uuid\";\nimport FeatureTemplate from \"./app/library/geometricElements/featureTemplate\";\nimport NormallyClosedValveCrescents from \"./app/library/geometricElements/normallyClosedValveCrecents\";\nimport NormallyClosedValveModificationsGap from \"./app/library/geometricElements/normallyClosedValveGap\";\nimport { ValveType } from \"./app/core/init\";\n\nexport var PRIMITIVES_SERVER = false;\n\nexport function enablePrimitiveServer() {\n PRIMITIVES_SERVER = true;\n}\nexport type LibraryEntryDefinition = {\n unique: { [key: string]: string };\n heritable: { [key: string]: string };\n units: { [key: string]: string };\n defaults: { [key: string]: number };\n minimum: { [key: string]: number };\n maximum: { [key: string]: number };\n mint: string;\n};\n\ntype LibraryEntry = {\n object: Template;\n key: string;\n};\n\ntype FeatureLibraryEntry = {\n object: FeatureTemplate;\n key: string;\n};\n\n/**\n * Component API Class that contains all the components and their definitions,\n * Replaces the FeatureSet API in the future and simplifies all the extension\n * of the library.\n *\n * @class ComponentAPI\n */\nexport class ComponentAPI {\n static library: { [key: string]: LibraryEntry } = {\n Template: { object: new Template(), key: \"FLOW\" },\n Text: { object: new Text(), key: \"FLOW\" },\n Port: { object: new Port(), key: \"FLOW\" },\n Anode: { object: new Anode(), key: \"INTEGRATION\" }, // ck addition\n Cathode: { object: new Cathode(), key: \"INTEGRATION\" }, // ck addition\n Channel: { object: new Channel(), key: \"FLOW\" },\n BetterMixer: { object: new BetterMixer(), key: \"FLOW\" },\n RotaryMixer: { object: new RotaryMixer(), key: \"FLOW\" },\n RotaryMixer_control: { object: new RotaryMixer(), key: \"CONTROL\" },\n AlignmentMarks: { object: new AlignmentMarks(), key: \"FLOW\" },\n AlignmentMarks_control: {\n object: new AlignmentMarks(),\n key: \"CONTROL\"\n },\n CellTrapL: { object: new CellTrapL(), key: \"FLOW\" },\n CellTrapL_cell: { object: new CellTrapL(), key: \"CELL\" },\n Gelchannel: { object: new Gelchannel(), key: \"FLOW\" }, // CK\n Gelchannel_cell: { object: new Gelchannel(), key: \"CELL\" }, // CK\n Chamber: { object: new Chamber(), key: \"FLOW\" },\n CurvedMixer: { object: new CurvedMixer(), key: \"FLOW\" },\n ToroidalMixer: { object: new ToroidalMixer(), key: \"FLOW\"},\n DiamondReactionChamber: {\n object: new DiamondReactionChamber(),\n key: \"FLOW\"\n },\n\n Connection: { object: new Connection(), key: \"FLOW\" },\n DropletGen: { object: new DropletGenerator(), key: \"FLOW\" },\n GradientGenerator: { object: new GradientGenerator(), key: \"FLOW\" },\n Mux: { object: new Mux(), key: \"FLOW\" },\n Mux_control: { object: new Mux(), key: \"CONTROL\" },\n Pump: { object: new Pump(), key: \"FLOW\" },\n Pump_control: { object: new Pump(), key: \"CONTROL\" },\n Pump3D: { object: new Pump3D(), key: \"FLOW\" },\n Pump3D_control: { object: new Pump3D(), key: \"CONTROL\" },\n RoundedChannel: { object: new RoundedChannel(), key: \"FLOW\" },\n thermoCycler: { object: new thermoCycler(), key: \"FLOW\" },\n Transition: { object: new Transition(), key: \"FLOW\" },\n Transposer: { object: new Transposer(), key: \"FLOW\" },\n Transposer_control: { object: new Transposer(), key: \"CONTROL\" },\n Tree: { object: new Tree(), key: \"FLOW\" },\n YTree: { object: new YTree(), key: \"FLOW\" },\n Valve: { object: new Valve(ValveType.NORMALLY_OPEN), key: \"CONTROL\" },\n // TODO: Get rid of this fully after we move over to the new valve feature system\n // Valve3D: { object: new Valve3D(ValveType.NORMALLY_CLOSED), key: \"FLOW\" },\n Valve3D_control: { object: new Valve3D(ValveType.NORMALLY_CLOSED), key: \"CONTROL\" },\n LLChamber: { object: new LLChamber(), key: \"FLOW\" },\n LLChamber_control: { object: new LLChamber(), key: \"CONTROL\" },\n \"3DMixer\": { object: new ThreeDMixer(), key: \"FLOW\" },\n \"3DMixer_control\": { object: new ThreeDMixer(), key: \"CONTROL\" },\n Via: { object: new Via(), key: \"FLOW\" },\n\n // new\n DogboneInsert: { object: new DogboneInsert(), key: \"FLOW\" },\n Filter: { object: new Filter(), key: \"FLOW\" },\n CellTrapS: { object: new CellTrapS(), key: \"FLOW\" },\n CellTrapS_cell: { object: new CellTrapS(), key: \"CELL\" },\n \"3DMux\": { object: new ThreeDMux(), key: \"FLOW\" },\n \"3DMux_control\": { object: new ThreeDMux(), key: \"CONTROL\" },\n ChemostatRing: { object: new ChemostatRing(), key: \"FLOW\" },\n ChemostatRing_control: { object: new ChemostatRing(), key: \"CONTROL\" },\n Incubation: { object: new Incubation(), key: \"FLOW\" },\n Merger: { object: new Merger(), key: \"FLOW\" },\n Merger_integration: { object: new Merger(), key: \"INTEGRATION\" },\n PicoInjection: { object: new PicoInjection(), key: \"FLOW\" },\n PicoInjection_integration: { object: new PicoInjection(), key: \"INTEGRATION\" },\n Sorter: { object: new Sorter(), key: \"FLOW\" },\n Sorter_integration: { object: new Sorter(), key: \"INTEGRATION\" },\n Splitter: { object: new Splitter(), key: \"FLOW\" },\n CapacitanceSensor: { object: new CapacitanceSensor(), key: \"FLOW\" },\n CapacitanceSensor_integration: { object: new CapacitanceSensor(), key: \"INTEGRATION\" },\n Node: { object: new Node(), key: \"FLOW\" },\n DropletGenT: { object: new DropletGeneratorT(), key: \"FLOW\" },\n DropletGenFlow: { object: new DropletGeneratorFlowFocus(), key: \"FLOW\" },\n LogicArray: { object: new LogicArray(), key: \"FLOW\" },\n LogicArray_control: { object: new LogicArray(), key: \"CONTROL\" },\n LogicArray_cell: { object: new LogicArray(), key: \"CELL\" },\n };\n\n static connectionLibrary: { [key: string]: LibraryEntry } = {\n Connection: { object: new Connection(), key: \"FLOW\" }\n };\n\n static featureLibrary: { [key: string]: FeatureLibraryEntry } = {\n // Features\n NormallyClosedValveModifications: { object: new NormallyClosedValveCrescents(), key: \"FLOW\" },\n NormallyClosedValveModifications_Gap: { object: new NormallyClosedValveModificationsGap(), key: \"GAP\" },\n\n }\n\n\n static customTypes: Map = new Map();\n __setString: any;\n __tools: any;\n __render2D: any;\n __render3D: any;\n name: any;\n setString: string | undefined;\n\n /**\n * Gets all the components definitions (template type objects) in the library.\n *\n * @static\n * @returns {Array