From 0a473e4b276e7ebb53099103b0727ce23e000092 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabrice=20PENHO=C3=8BT?= Date: Fri, 13 Aug 2021 20:00:03 +0200 Subject: [PATCH] =?UTF-8?q?Modification=20de=20la=20premi=C3=A8re=20page?= =?UTF-8?q?=20d'exemple=20d'utilisation=20du=20projet=20et=20des=20fichier?= =?UTF-8?q?s=20li=C3=A9s.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/CSS/paper.min.css | 2 + public/JS/firstExample.app.js | 409 ++++++++++++++++++++++++++++ public/datas/elements-chimiques.csv | 178 ++++++------ public/index.html | 11 +- src/firstExample.ts | 2 + 5 files changed, 508 insertions(+), 94 deletions(-) create mode 100644 public/CSS/paper.min.css create mode 100644 public/JS/firstExample.app.js diff --git a/public/CSS/paper.min.css b/public/CSS/paper.min.css new file mode 100644 index 0000000..3a65ed6 --- /dev/null +++ b/public/CSS/paper.min.css @@ -0,0 +1,2 @@ +@charset "UTF-8";@import url("https://fonts.googleapis.com/css?family=Neucha|Patrick+Hand+SC");html{--primary:#41403e;--secondary:#0071de;--success:#86a361;--warning:#ddcd45;--danger:#a7342d;--muted:#868e96;--primary-light:#c1c0bd;--secondary-light:#deefff;--success-light:#d0dbc2;--warning-light:#f5f0c6;--danger-light:#f0cbc9;--muted-light:#e6e7e9;--primary-dark:#000;--secondary-dark:#000;--success-dark:#374427;--warning-dark:#746a15;--danger-dark:#000;--muted-dark:#313538;--primary-light-10:#5b5a57;--secondary-light-10:#128bff;--success-light-10:#9fb681;--warning-light-10:#e5d970;--danger-light-10:#cb453c;--muted-light-10:#a1a8ae;--primary-dark-10:#272625;--secondary-dark-10:#0057ab;--success-dark-10:#6c844d;--warning-dark-10:#cab925;--danger-dark-10:#7f2722;--muted-dark-10:#6c757d;--primary-shaded-50:#c1c0bd;--primary-shaded-70:#f2f2f2;--white-dark:rgba(0,0,0,0.03);--white-dark-light-80:hsla(0,0%,80%,0.03);--light-dark:rgba(0,0,0,0.7);--white:#fff;--main-background:#fff;--main-background-light:#fff;--primary-text:#272625;--secondary-text:#0057ab;--success-text:#6c844d;--warning-text:#cab925;--danger-text:#7f2722;--muted-text:#6c757d;--primary-inverse:#fff}html,html.dark{--black:#000;--shadow-color-regular:rgba(0,0,0,0.2);--shadow-color-hover:rgba(0,0,0,0.3)}html.dark{--primary:#fff;--secondary:#0071de;--success:#189418;--warning:#ddcd45;--danger:#ff8c86;--muted:#868e96;--primary-light:#fff;--secondary-light:#007ef8;--success-light:#1caa1c;--warning-light:#e1d35b;--danger-light:#ffa4a0;--muted-light:#949ba2;--primary-dark:grey;--secondary-dark:#000;--success-dark:#031003;--warning-dark:#746a15;--danger-dark:#a00800;--muted-dark:#313538;--primary-light-10:#fff;--secondary-light-10:#128bff;--success-light-10:#1fc01f;--warning-light-10:#e5d970;--danger-light-10:#ffbcb9;--muted-light-10:#a1a8ae;--primary-dark-10:#e6e6e6;--secondary-dark-10:#0057ab;--success-dark-10:#116811;--warning-dark-10:#cab925;--danger-dark-10:#ff5c53;--muted-dark-10:#6c757d;--primary-shaded-50:#343332;--primary-shaded-70:#2f2e2d;--white-dark:hsla(0,0%,100%,0.03);--white-dark-light-80:hsla(0,0%,100%,0.03);--light-dark:hsla(0,0%,100%,0.7);--white:#fff;--main-background:#41403e;--main-background-light:#c1c0bd;--primary-text:#41403e;--secondary-text:#0057ab;--success-text:#116811;--warning-text:#cab925;--danger-text:#ff5c53;--muted-text:#6c757d;--primary-inverse:#41403e}.text-primary{color:#41403e;color:var(--primary)}.background-primary{background-color:#41403e;background-color:var(--primary-light)}.text-secondary{color:#41403e;color:var(--secondary)}.background-secondary{background-color:#41403e;background-color:var(--secondary-light)}.text-success{color:#41403e;color:var(--success)}.background-success{background-color:#41403e;background-color:var(--success-light)}.text-warning{color:#41403e;color:var(--warning)}.background-warning{background-color:#41403e;background-color:var(--warning-light)}.text-danger{color:#41403e;color:var(--danger)}.background-danger{background-color:#41403e;background-color:var(--danger-light)}.text-muted{color:#41403e;color:var(--muted)}.background-muted{background-color:#41403e;background-color:var(--muted-light)} +/*! normalize.css v7.0.0 | MIT License | github.com/necolas/normalize.css */html{line-height:1.15;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,footer,header,nav,section{display:block}h1{font-size:2em;margin:.67em 0}figcaption,figure,main{display:block}figure{margin:1em 40px}hr{box-sizing:content-box;height:0;overflow:visible}pre{font-family:monospace,monospace;font-size:1em}a{background-color:transparent;-webkit-text-decoration-skip:objects}abbr[title]{border-bottom:none;text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}b,strong{font-weight:inherit;font-weight:bolder}code,kbd,samp{font-family:monospace,monospace;font-size:1em}dfn{font-style:italic}mark{background-color:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}audio,video{display:inline-block}audio:not([controls]){display:none;height:0}img{border-style:none}svg:not(:root){overflow:hidden}button,input,optgroup,select,textarea{font-family:sans-serif;font-size:100%;line-height:1.15;margin:0}button,input{overflow:visible}button,select{text-transform:none}[type=reset],[type=submit],button,html [type=button]{-webkit-appearance:button}[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-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring,button:-moz-focusring{outline:1px dotted ButtonText}fieldset{padding:.35em .75em .625em}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{display:inline-block;vertical-align:baseline}textarea{overflow:auto}[type=checkbox],[type=radio]{box-sizing:border-box;padding:0}[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}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}details,menu{display:block}summary{display:list-item}canvas{display:inline-block}[hidden],template{display:none}html{box-sizing:border-box}*,:after,:before{box-sizing:inherit}.container.container-xs{max-width:480px}.container.container-sm{max-width:768px}.container.container-md{max-width:992px}.container.container-lg{max-width:1200px}.section{margin-bottom:2rem;margin-top:1rem;word-wrap:break-word}.section:after{color:#8f8d89;content:"~~~";display:block;font-size:1.5rem;position:relative;text-align:center}hr{border:0}hr:after{color:#8f8d89;content:"~~~";display:block;font-size:1.5rem;position:relative;text-align:center;top:-.75rem}.paper{background-color:#41403e;background-color:var(--main-background);border:1px solid #c1c0bd;box-shadow:-1px 5px 35px -9px rgba(0,0,0,.2);margin-bottom:1rem;margin-top:1rem;padding:2rem}@media only screen and (max-width:480px){.paper{margin-bottom:0;margin-top:0;padding:1rem;width:100%}}.row{display:flex;flex-flow:row wrap;margin-bottom:1rem;margin-left:auto;margin-right:auto}.row.flex-right{justify-content:flex-end}.row.flex-center{justify-content:center}.row.flex-edges{justify-content:space-between}.row.flex-spaces{justify-content:space-around}.row.flex-top{align-items:flex-start}.row.flex-middle{align-items:center}.row.flex-bottom{align-items:flex-end}.col{padding:1rem}@media only screen and (max-width:768px){.col{flex:0 0 100%;max-width:100%}}.col-fill{flex:1 1 0;width:auto}@media only screen and (min-width:0){.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%}}@media only screen and (min-width:480px){.xs-1{flex:0 0 8.3333333333%;max-width:8.3333333333%}.xs-2{flex:0 0 16.6666666667%;max-width:16.6666666667%}.xs-3{flex:0 0 25%;max-width:25%}.xs-4{flex:0 0 33.3333333333%;max-width:33.3333333333%}.xs-5{flex:0 0 41.6666666667%;max-width:41.6666666667%}.xs-6{flex:0 0 50%;max-width:50%}.xs-7{flex:0 0 58.3333333333%;max-width:58.3333333333%}.xs-8{flex:0 0 66.6666666667%;max-width:66.6666666667%}.xs-9{flex:0 0 75%;max-width:75%}.xs-10{flex:0 0 83.3333333333%;max-width:83.3333333333%}.xs-11{flex:0 0 91.6666666667%;max-width:91.6666666667%}.xs-12{flex:0 0 100%;max-width:100%}}@media only screen and (min-width:768px){.sm-1{flex:0 0 8.3333333333%;max-width:8.3333333333%}.sm-2{flex:0 0 16.6666666667%;max-width:16.6666666667%}.sm-3{flex:0 0 25%;max-width:25%}.sm-4{flex:0 0 33.3333333333%;max-width:33.3333333333%}.sm-5{flex:0 0 41.6666666667%;max-width:41.6666666667%}.sm-6{flex:0 0 50%;max-width:50%}.sm-7{flex:0 0 58.3333333333%;max-width:58.3333333333%}.sm-8{flex:0 0 66.6666666667%;max-width:66.6666666667%}.sm-9{flex:0 0 75%;max-width:75%}.sm-10{flex:0 0 83.3333333333%;max-width:83.3333333333%}.sm-11{flex:0 0 91.6666666667%;max-width:91.6666666667%}.sm-12{flex:0 0 100%;max-width:100%}}@media only screen and (min-width:992px){.md-1{flex:0 0 8.3333333333%;max-width:8.3333333333%}.md-2{flex:0 0 16.6666666667%;max-width:16.6666666667%}.md-3{flex:0 0 25%;max-width:25%}.md-4{flex:0 0 33.3333333333%;max-width:33.3333333333%}.md-5{flex:0 0 41.6666666667%;max-width:41.6666666667%}.md-6{flex:0 0 50%;max-width:50%}.md-7{flex:0 0 58.3333333333%;max-width:58.3333333333%}.md-8{flex:0 0 66.6666666667%;max-width:66.6666666667%}.md-9{flex:0 0 75%;max-width:75%}.md-10{flex:0 0 83.3333333333%;max-width:83.3333333333%}.md-11{flex:0 0 91.6666666667%;max-width:91.6666666667%}.md-12{flex:0 0 100%;max-width:100%}}@media only screen and (min-width:1200px){.lg-1{flex:0 0 8.3333333333%;max-width:8.3333333333%}.lg-2{flex:0 0 16.6666666667%;max-width:16.6666666667%}.lg-3{flex:0 0 25%;max-width:25%}.lg-4{flex:0 0 33.3333333333%;max-width:33.3333333333%}.lg-5{flex:0 0 41.6666666667%;max-width:41.6666666667%}.lg-6{flex:0 0 50%;max-width:50%}.lg-7{flex:0 0 58.3333333333%;max-width:58.3333333333%}.lg-8{flex:0 0 66.6666666667%;max-width:66.6666666667%}.lg-9{flex:0 0 75%;max-width:75%}.lg-10{flex:0 0 83.3333333333%;max-width:83.3333333333%}.lg-11{flex:0 0 91.6666666667%;max-width:91.6666666667%}.lg-12{flex:0 0 100%;max-width:100%}}.align-top{align-self:flex-start}.align-middle{align-self:center}.align-bottom{align-self:flex-end}.container{margin:0 auto;max-width:960px;position:relative;width:100%}@media only screen and (max-width:992px){.container{width:85%}}@media only screen and (max-width:480px){.container{width:90%}}code{color:#41403e;color:var(--secondary);background-color:#41403e;background-color:var(--primary-shaded-70)}code,kbd{border-radius:3px;font-size:80%;padding:2px 4px}kbd{color:#41403e;color:var(--primary-inverse);background-color:#41403e;background-color:var(--primary)}pre{background-color:#41403e;background-color:var(--primary-shaded-70);border-radius:3px;border:1px solid #41403e;border-color:var(--primary-shaded-50);font-size:80%;line-height:1.5;overflow-x:auto;padding:1em;word-break:break-all;word-wrap:break-word}pre,pre code{color:#41403e;color:var(--inverse-primary);display:block;white-space:pre}pre code{background:transparent;font-size:inherit;padding:initial}html{color:#41403e;color:var(--primary);font-size:20px}a,button,html,input,option,p,select,table,tbody,td,textarea,th,thead,tr{font-family:Neucha,sans-serif}h1,h2,h3,h4,h5,h6{font-family:Patrick Hand SC,sans-serif;font-weight:400}h1{font-size:4rem}h2{font-size:3rem}h3{font-size:2rem}h4{font-size:1.5rem}h5{font-size:1rem}h6{font-size:.8rem}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}img{border-bottom-left-radius:15px 255px;border-bottom-right-radius:225px 15px;border-top-left-radius:255px 15px;border-top-right-radius:15px 225px;border:2px solid #41403e;border-color:var(--primary);display:block;height:auto;max-width:100%}img.float-left{float:left;margin:1rem 1rem 1rem 0}img.float-right{float:right;margin:1rem 0 1rem 1rem}img.no-responsive{display:initial;height:auto;max-width:none}img.no-border{border:0;border-radius:0}ol{list-style-type:decimal}ol ol{list-style-type:upper-alpha}ol ol ol{list-style-type:upper-roman}ol ol ol ol{list-style-type:lower-alpha}ol ol ol ol ol{list-style-type:lower-roman}ul{list-style:none;margin-left:0}ul li:before{content:"-"}ul li{text-indent:-7px}ul li .badge,ul li [popover-bottom]:after,ul li [popover-left]:after,ul li [popover-right]:after,ul li [popover-top]:after{text-indent:0}ul li:before{left:-7px;position:relative}ul ul li:before{content:"+"}ul ul ul li:before{content:"~"}ul ul ul ul li:before{content:"⤍"}ul ul ul ul ul li:before{content:"⁎"}ul.inline li{display:inline;margin-left:5px}table{box-sizing:border-box;max-width:100%;overflow-x:auto;width:100%}@media only screen and (max-width:480px){table tbody tr td,table thead tr th{padding:2%}}table thead tr th{line-height:1.5;padding:8px;text-align:left;vertical-align:bottom}table tbody tr td{border-top:1px dashed #d9d9d8;line-height:1.5;padding:8px;vertical-align:top}table.table-hover tbody tr:hover{color:#41403e;color:var(--secondary)}table.table-alternating tbody tr:nth-of-type(2n){color:#82807c}.border{border:2px solid #41403e;border-color:var(--primary)}.border,.border-1,.child-borders>:nth-child(6n+1){border-bottom-left-radius:15px 255px;border-bottom-right-radius:225px 15px;border-top-left-radius:255px 15px;border-top-right-radius:15px 225px}.border-2,.child-borders>:nth-child(6n+2){border-bottom-left-radius:185px 25px;border-bottom-right-radius:20px 205px;border-top-left-radius:125px 25px;border-top-right-radius:10px 205px}.border-3,.child-borders>:nth-child(6n+3){border-bottom-left-radius:225px 15px;border-bottom-right-radius:15px 255px;border-top-left-radius:15px 225px;border-top-right-radius:255px 15px}.border-4,.child-borders>:nth-child(6n+4){border-bottom-left-radius:25px 115px;border-bottom-right-radius:155px 25px;border-top-left-radius:15px 225px;border-top-right-radius:25px 150px}.border-5,.child-borders>:nth-child(6n+5){border-bottom-left-radius:20px 115px;border-bottom-right-radius:15px 105px;border-top-left-radius:250px 15px;border-top-right-radius:25px 80px}.border-6,.child-borders>:nth-child(6n+6){border-bottom-left-radius:15px 225px;border-bottom-right-radius:20px 205px;border-top-left-radius:28px 125px;border-top-right-radius:100px 30px}.child-borders>*{border:2px solid #41403e;border-color:var(--primary)}.border-white{border-color:#41403e;border-color:var(--white)}.border-dotted{border-style:dotted}.border-dashed{border-style:dashed}.border-thick{border-width:5px}.border-primary{border-color:#41403e;border-color:var(--primary)}.border-secondary{border-color:#41403e;border-color:var(--secondary)}.border-success{border-color:#41403e;border-color:var(--success)}.border-warning{border-color:#41403e;border-color:var(--warning)}.border-danger{border-color:#41403e;border-color:var(--danger)}.border-muted{border-color:#41403e;border-color:var(--muted)}.shadow{transition:all 235ms ease 0s;box-shadow:15px 28px 25px -18px rgba(0,0,0,.2)}.shadow.shadow-large{transition:all 235ms ease 0s;box-shadow:20px 38px 34px -26px rgba(0,0,0,.2)}.shadow.shadow-small{transition:all 235ms ease 0s;box-shadow:10px 19px 17px -13px rgba(0,0,0,.2)}.shadow.shadow-hover:hover{transform:translate3d(0,2px,0);box-shadow:2px 8px 8px -5px rgba(0,0,0,.3)}.child-shadows-hover>*,.child-shadows>*{transition:all 235ms ease 0s;box-shadow:15px 28px 25px -18px rgba(0,0,0,.2)}.child-shadows-hover>:hover{transform:translate3d(0,2px,0);box-shadow:2px 8px 8px -5px rgba(0,0,0,.3)}.collapsible{display:flex;flex-direction:column}.collapsible:first-of-type{border-top:1px solid #41403e;border-top-color:var(--muted-light)}.collapsible .collapsible-body{background-color:#41403e;background-color:var(--white-dark-light-80);transition:all 235ms ease-in-out 0s;border-bottom:1px solid #41403e;border-bottom-color:var(--muted-light);margin:0;max-height:0;opacity:0;overflow:hidden;padding:0 .75rem}.collapsible input{display:none}.collapsible input:checked+label{color:#41403e;color:var(--primary)}.collapsible input[id^=collapsible]:checked~div.collapsible-body{margin:0;max-height:960px;opacity:1;padding:.75rem}.collapsible label{color:#41403e;color:var(--primary);border-bottom:1px solid #41403e;border-bottom-color:var(--muted-light);display:inline-block;font-weight:600;margin:0 0 -1px;padding:.75rem;text-align:center}.collapsible label:hover{color:#41403e;color:var(--muted);cursor:pointer}.alert{border-bottom-left-radius:15px 255px;border-bottom-right-radius:225px 15px;border-top-left-radius:255px 15px;border-top-right-radius:15px 225px;border:2px solid #41403e;border-color:var(--primary);margin-bottom:20px;padding:15px;width:100%}.alert.dismissible{transition:all 235ms ease-in-out 0s;display:flex;justify-content:space-between;max-height:48rem;overflow:hidden}.alert .btn-close{transition:all 235ms ease-in-out 0s;color:#41403e;color:var(--primary-light-10);cursor:pointer;margin-left:.75rem}.alert .btn-close:active,.alert .btn-close:focus,.alert .btn-close:hover{color:#41403e;color:var(--primary-dark-10)}.alert-primary{color:#41403e;color:var(--primary-text);background-color:#41403e;background-color:var(--primary-light);border-color:#41403e;border-color:var(--primary)}.alert-primary .btn-close{color:#41403e;color:var(--primary-light-10)}.alert-primary .btn-close:active,.alert-primary .btn-close:focus,.alert-primary .btn-close:hover{color:#41403e;color:var(--primary-dark-10)}.alert-secondary{color:#41403e;color:var(--secondary-text);background-color:#41403e;background-color:var(--secondary-light);border-color:#41403e;border-color:var(--secondary)}.alert-secondary .btn-close{color:#41403e;color:var(--secondary-light-10)}.alert-secondary .btn-close:active,.alert-secondary .btn-close:focus,.alert-secondary .btn-close:hover{color:#41403e;color:var(--secondary-dark-10)}.alert-success{color:#41403e;color:var(--success-text);background-color:#41403e;background-color:var(--success-light);border-color:#41403e;border-color:var(--success)}.alert-success .btn-close{color:#41403e;color:var(--success-light-10)}.alert-success .btn-close:active,.alert-success .btn-close:focus,.alert-success .btn-close:hover{color:#41403e;color:var(--success-dark-10)}.alert-warning{color:#41403e;color:var(--warning-text);background-color:#41403e;background-color:var(--warning-light);border-color:#41403e;border-color:var(--warning)}.alert-warning .btn-close{color:#41403e;color:var(--warning-light-10)}.alert-warning .btn-close:active,.alert-warning .btn-close:focus,.alert-warning .btn-close:hover{color:#41403e;color:var(--warning-dark-10)}.alert-danger{color:#41403e;color:var(--danger-text);background-color:#41403e;background-color:var(--danger-light);border-color:#41403e;border-color:var(--danger)}.alert-danger .btn-close{color:#41403e;color:var(--danger-light-10)}.alert-danger .btn-close:active,.alert-danger .btn-close:focus,.alert-danger .btn-close:hover{color:#41403e;color:var(--danger-dark-10)}.alert-muted{color:#41403e;color:var(--muted-text);background-color:#41403e;background-color:var(--muted-light);border-color:#41403e;border-color:var(--muted)}.alert-muted .btn-close{color:#41403e;color:var(--muted-light-10)}.alert-muted .btn-close:active,.alert-muted .btn-close:focus,.alert-muted .btn-close:hover{color:#41403e;color:var(--muted-dark-10)}.alert-state{display:none}.alert-state:checked+.dismissible{border-width:0;margin:0;max-height:0;opacity:0;padding-bottom:0;padding-top:0}article .article-title{font-size:3rem}article .article-meta{color:#41403e;color:var(--muted-text);font-size:15px}article .article-meta a{color:#41403e;color:var(--muted-text);background-image:none}article .article-meta a:hover{color:#41403e;color:var(--light-dark)}article .text-lead{font-size:30px;line-height:1.3;margin:35px}article button:not(:first-of-type){margin-left:2rem}@media only screen and (max-width:480px){article button:not(:first-of-type){margin-left:0}}article p{line-height:1.6}.badge{border-bottom-left-radius:15px 255px;border-bottom-right-radius:225px 15px;border-top-left-radius:255px 15px;border-top-right-radius:15px 225px;color:#41403e;color:var(--white);background-color:#41403e;background-color:var(--muted);border:2px solid transparent;display:inline-block;font-size:75%;font-weight:700;line-height:1;padding:.25em .4em;text-align:center;vertical-align:baseline;white-space:nowrap}.badge.primary{background-color:#41403e;background-color:var(--primary)}.badge.secondary{background-color:#41403e;background-color:var(--secondary)}.badge.success{background-color:#41403e;background-color:var(--success)}.badge.warning{background-color:#41403e;background-color:var(--warning)}.badge.danger{background-color:#41403e;background-color:var(--danger)}.badge.muted{background-color:#41403e;background-color:var(--muted)}ul.breadcrumb{list-style:none;padding:10px 16px}ul.breadcrumb li{display:inline;font-size:20px}ul.breadcrumb li:before{content:""}ul.breadcrumb li a{color:#41403e;color:var(--secondary);background-image:none;text-decoration:none}ul.breadcrumb li a:hover{text-decoration:underline}ul.breadcrumb li+li:before{content:"/ ";padding:8px}.paper-btn,[type=button],button{border-bottom-left-radius:15px 255px;border-bottom-right-radius:225px 15px;border-top-left-radius:255px 15px;border-top-right-radius:15px 225px;transition:all 235ms ease 0s;box-shadow:15px 28px 25px -18px rgba(0,0,0,.2);transition:all 235ms ease-in-out 0s;color:#41403e;color:var(--primary);background-color:#41403e;background-color:var(--main-background);align-self:center;background-image:none;border:2px solid #41403e;border-color:var(--primary);cursor:pointer;display:inline-block;font-size:1rem;outline:none;padding:.75rem}@media only screen and (max-width:520px){.paper-btn,[type=button],button{display:inline-block;margin:0 auto 1rem;text-align:center}}.paper-btn.btn-large,[type=button].btn-large,button.btn-large{transition:all 235ms ease 0s;box-shadow:20px 38px 34px -26px rgba(0,0,0,.2);font-size:2rem;padding:1rem}.paper-btn.btn-small,[type=button].btn-small,button.btn-small{transition:all 235ms ease 0s;box-shadow:10px 19px 17px -13px rgba(0,0,0,.2);font-size:.75rem;padding:.5rem}.paper-btn.btn-block,[type=button].btn-block,button.btn-block{display:block;width:100%}.paper-btn:hover,[type=button]:hover,button:hover{transform:translate3d(0,2px,0);box-shadow:2px 8px 8px -5px rgba(0,0,0,.3)}.paper-btn:focus,[type=button]:focus,button:focus{border:2px solid #41403e;border-color:var(--secondary);box-shadow:2px 8px 4px -6px rgba(0,0,0,.3)}.paper-btn:active,[type=button]:active,button:active{border-color:rgba(0,0,0,.2);transition:none}.paper-btn.disabled,.paper-btn[disabled],[type=button].disabled,[type=button][disabled],button.disabled,button[disabled]{cursor:not-allowed;opacity:.5}a{color:#41403e;color:var(--secondary);background-image:linear-gradient(5deg,transparent 65%,#0071de 80%,transparent 90%),linear-gradient(165deg,transparent 5%,#0071de 15%,transparent 25%),linear-gradient(165deg,transparent 45%,#0071de 55%,transparent 65%),linear-gradient(15deg,transparent 25%,#0071de 35%,transparent 50%);background-position:0 90%;background-repeat:repeat-x;background-size:4px 3px}a,a:visited{text-decoration:none}a:visited{color:#41403e;color:var(--primary)}.paper-btn.btn-primary,[type=button].btn-primary,button.btn-primary{color:#41403e;color:var(--primary-text);background-color:#41403e;background-color:var(--primary-light);border-color:#41403e;border-color:var(--primary)}.paper-btn.btn-primary:hover:active,[type=button].btn-primary:hover:active,button.btn-primary:hover:active{background-color:#a8a6a3}.paper-btn.btn-secondary,[type=button].btn-secondary,button.btn-secondary{color:#41403e;color:var(--secondary-text);background-color:#41403e;background-color:var(--secondary-light);border-color:#41403e;border-color:var(--secondary)}.paper-btn.btn-secondary:hover:active,[type=button].btn-secondary:hover:active,button.btn-secondary:hover:active{background-color:#abd6ff}.paper-btn.btn-success,[type=button].btn-success,button.btn-success{color:#41403e;color:var(--success-text);background-color:#41403e;background-color:var(--success-light);border-color:#41403e;border-color:var(--success)}.paper-btn.btn-success:hover:active,[type=button].btn-success:hover:active,button.btn-success:hover:active{background-color:#b7c9a1}.paper-btn.btn-warning,[type=button].btn-warning,button.btn-warning{color:#41403e;color:var(--warning-text);background-color:#41403e;background-color:var(--warning-light);border-color:#41403e;border-color:var(--warning)}.paper-btn.btn-warning:hover:active,[type=button].btn-warning:hover:active,button.btn-warning:hover:active{background-color:#ede49b}.paper-btn.btn-danger,[type=button].btn-danger,button.btn-danger{color:#41403e;color:var(--danger-text);background-color:#41403e;background-color:var(--danger-light);border-color:#41403e;border-color:var(--danger)}.paper-btn.btn-danger:hover:active,[type=button].btn-danger:hover:active,button.btn-danger:hover:active{background-color:#e6a5a1}.paper-btn.btn-muted,[type=button].btn-muted,button.btn-muted{color:#41403e;color:var(--muted-text);background-color:#41403e;background-color:var(--muted-light);border-color:#41403e;border-color:var(--muted)}.paper-btn.btn-muted:hover:active,[type=button].btn-muted:hover:active,button.btn-muted:hover:active{background-color:#caced1}.paper-btn.btn-primary-outline,[type=button].btn-primary-outline,button.btn-primary-outline{background-color:#fff;border-color:#a8a6a3;color:#41403e}.paper-btn.btn-primary-outline:hover,[type=button].btn-primary-outline:hover,button.btn-primary-outline:hover{background-color:#c1c0bd;border-color:#41403e}.paper-btn.btn-primary-outline:hover:active,[type=button].btn-primary-outline:hover:active,button.btn-primary-outline:hover:active{background-color:#a8a6a3}.paper-btn.btn-secondary-outline,[type=button].btn-secondary-outline,button.btn-secondary-outline{background-color:#fff;border-color:#abd6ff;color:#0057ab}.paper-btn.btn-secondary-outline:hover,[type=button].btn-secondary-outline:hover,button.btn-secondary-outline:hover{background-color:#deefff;border-color:#0071de}.paper-btn.btn-secondary-outline:hover:active,[type=button].btn-secondary-outline:hover:active,button.btn-secondary-outline:hover:active{background-color:#abd6ff}.paper-btn.btn-success-outline,[type=button].btn-success-outline,button.btn-success-outline{background-color:#fff;border-color:#b7c9a1;color:#6c844d}.paper-btn.btn-success-outline:hover,[type=button].btn-success-outline:hover,button.btn-success-outline:hover{background-color:#d0dbc2;border-color:#86a361}.paper-btn.btn-success-outline:hover:active,[type=button].btn-success-outline:hover:active,button.btn-success-outline:hover:active{background-color:#b7c9a1}.paper-btn.btn-warning-outline,[type=button].btn-warning-outline,button.btn-warning-outline{background-color:#fff;border-color:#ede49b;color:#cab925}.paper-btn.btn-warning-outline:hover,[type=button].btn-warning-outline:hover,button.btn-warning-outline:hover{background-color:#f5f0c6;border-color:#ddcd45}.paper-btn.btn-warning-outline:hover:active,[type=button].btn-warning-outline:hover:active,button.btn-warning-outline:hover:active{background-color:#ede49b}.paper-btn.btn-danger-outline,[type=button].btn-danger-outline,button.btn-danger-outline{background-color:#fff;border-color:#e6a5a1;color:#7f2722}.paper-btn.btn-danger-outline:hover,[type=button].btn-danger-outline:hover,button.btn-danger-outline:hover{background-color:#f0cbc9;border-color:#a7342d}.paper-btn.btn-danger-outline:hover:active,[type=button].btn-danger-outline:hover:active,button.btn-danger-outline:hover:active{background-color:#e6a5a1}.paper-btn.btn-muted-outline,[type=button].btn-muted-outline,button.btn-muted-outline{background-color:#fff;border-color:#caced1;color:#6c757d}.paper-btn.btn-muted-outline:hover,[type=button].btn-muted-outline:hover,button.btn-muted-outline:hover{background-color:#e6e7e9;border-color:#868e96}.paper-btn.btn-muted-outline:hover:active,[type=button].btn-muted-outline:hover:active,button.btn-muted-outline:hover:active{background-color:#caced1}.card{transition:all 235ms ease 0s;box-shadow:15px 28px 25px -18px rgba(0,0,0,.2);-webkit-backface-visibility:hidden;backface-visibility:hidden;border:2px solid #41403e;border-color:var(--muted-light);display:flex;flex-direction:column;position:relative;will-change:transform;word-wrap:break-word}.card:hover{transform:translate3d(0,2px,0);box-shadow:2px 8px 8px -5px rgba(0,0,0,.3)}.card .card-footer,.card .card-header{background-color:#41403e;background-color:var(--white-dark);border-color:#41403e;border-color:var(--muted-light);padding:.75rem 1.25rem}.card .card-header{border-bottom-style:solid;border-bottom-width:2px}.card .card-footer{border-top-style:solid;border-top-width:2px}.card .card-body{flex:1 1 auto;padding:1.25rem}.card .card-body .card-title,.card .card-body h4{margin-bottom:.5rem;margin-top:0}.card .card-body .card-subtitle,.card .card-body h5{color:#0071de;margin-bottom:.5rem;margin-top:0}.card .card-body .card-text,.card .card-body p{margin-bottom:1rem;margin-top:0}.card .card-body .card-link+.card-link,.card .card-body a+a{margin-left:1.25rem}.card .image-bottom,.card .image-top,.card img{border:0;border-radius:0}input,select,textarea{color:#41403e;color:var(--primary);background:transparent;border-bottom-left-radius:15px 255px;border-bottom-right-radius:225px 15px;border-top-left-radius:255px 15px;border-top-right-radius:15px 225px;border:2px solid #41403e;border-color:var(--primary);display:block;font-size:1rem;outline:none;padding:.5rem}input:focus,select:focus,textarea:focus{border:2px solid #41403e;border-color:var(--secondary)}select{height:2.35rem}.disabled,input.disabled,input[disabled],select.disabled,select[disabled],textarea.disabled,textarea[disabled]{cursor:not-allowed;opacity:.5}.form-group{margin-bottom:1rem}.form-group>label,.form-group legend{display:inline-block;margin-bottom:.5rem}.form-group .input-block{width:100%}.form-group textarea{max-height:90vh;max-width:100%}.form-group textarea.no-resize{resize:none}.form-group .paper-check,.form-group .paper-radio{cursor:pointer;display:block;margin-bottom:.5rem}.form-group .paper-check input,.form-group .paper-radio input{border:0;height:1px;margin:-1px;opacity:0;overflow:hidden;padding:0;position:absolute;width:1px}.form-group .paper-check input+span,.form-group .paper-radio input+span{display:block}.form-group .paper-check input+span:before,.form-group .paper-radio input+span:before{border:2px solid #41403e;border-color:var(--primary);content:"";display:inline-block;height:1rem;margin-right:.75em;position:relative;vertical-align:-.25em;width:1rem}.form-group .paper-check input[type=radio]+span:before,.form-group .paper-radio input[type=radio]+span:before{border-bottom-left-radius:.7rem 1rem;border-bottom-right-radius:1rem .9rem;border-top-left-radius:1rem 1rem;border-top-right-radius:1rem .6rem}.form-group .paper-check input[type=radio]:checked+span:before,.form-group .paper-radio input[type=radio]:checked+span:before{background:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100'%3E%3Cpath fill='%230071de' d='M49.346 46.341c-3.79-2.005 3.698-10.294 7.984-8.89 8.713 2.852 4.352 20.922-4.901 20.269-4.684-.33-12.616-7.405-14.38-11.818-2.375-5.938 7.208-11.688 11.624-13.837 9.078-4.42 18.403-3.503 22.784 6.651 4.049 9.378 6.206 28.09-1.462 36.276-7.091 7.567-24.673 2.277-32.357-1.079-11.474-5.01-24.54-19.124-21.738-32.758 3.958-19.263 28.856-28.248 46.044-23.244 20.693 6.025 22.012 36.268 16.246 52.826-5.267 15.118-17.03 26.26-33.603 21.938-11.054-2.883-20.984-10.949-28.809-18.908C9.236 66.096 2.704 57.597 6.01 46.371c3.059-10.385 12.719-20.155 20.892-26.604C40.809 8.788 58.615 1.851 75.058 12.031c9.289 5.749 16.787 16.361 18.284 27.262.643 4.698.646 10.775-3.811 13.746'/%3E%3C/svg%3E") 0 no-repeat}.form-group .paper-check input[type=checkbox]+span:before,.form-group .paper-radio input[type=checkbox]+span:before{border-bottom-left-radius:15px 255px;border-bottom-right-radius:225px 15px;border-top-left-radius:255px 15px;border-top-right-radius:15px 225px}.form-group .paper-check input[type=checkbox]:checked+span:before,.form-group .paper-radio input[type=checkbox]:checked+span:before{background:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100'%3E%3Cpath stroke='%230071de' stroke-width='16' d='M13 62c.61 1.6 1.304 2.304 1.757 2.757l2.076 2.076c.542.542 1.042 1.06 1.829 1.824.578.56 1.005.97 2.026 1.744.559.424 1.191.84 1.884 1.284 1.165.746 1.598 1.002 2.5 1.551.47.286 1.437.869 1.93 1.165.998.6 1.997 1.198 2.494 1.499.985.598 1.47.896 1.947 1.2 1.397.89 1.837 1.197 2.7 1.796.422.292 1.24.877 2.056 1.419a33.039 33.039 0 002.38 1.438c.744.409 1.451.758 2.378 1.226.761.383 1.55.828 2.407 1.41.731.497 1.496 1.083 2.279 1.258.355.08.147-.955.357-1.868.181-.787.982-1.214 1-2.079.02-.995.08-1.8.425-2.561.436-.96.54-1.668.797-2.682.188-.747.397-1.312.778-2.624.209-.718.415-1.486.708-2.28.155-.418.774-1.731 1.348-2.641.306-.484.65-.97 1.007-1.474.747-1.06 1.153-1.602 1.937-2.771.406-.606.803-1.235 1.205-1.877.407-.65.814-1.312 1.231-1.975.42-.668.834-1.343 1.73-2.648.448-.65.915-1.284 1.387-1.91.47-.623.947-1.236 1.422-1.846.94-1.21 1.861-2.409 2.303-3.01a84.919 84.919 0 002.46-3.543c1.106-1.685 1.441-2.236 1.777-2.771.328-.525.963-1.546 1.274-2.04a89.78 89.78 0 011.51-2.325c.591-.864 1.18-1.68 1.465-2.075.55-.761 1.317-1.823 1.779-2.49.439-.634.853-1.252 1.457-2.157.596-.891.965-1.468 1.515-2.23.584-.809 1.125-1.402 1.838-2.123.613-.62.451-1.483.704-2.347.257-.878.755-1.625 1-2.41.251-.803.763-1.394 1.332-2.254.546-.824.735-1.671 1.316-2.336.556-.636 1.386-1.226 1.859-1.9.508-.724.789-1.4 1.603-1.567l.712-.49' fill='none'/%3E%3C/svg%3E") 0 no-repeat}.form-group .paper-switch-2-label,.form-group .paper-switch-label{cursor:pointer;float:left}.form-group .paper-switch-label{margin:-6px 10px 0 0}.form-group .paper-switch-2-label{margin:0 10px 0 0}.form-group .paper-switch,.form-group .paper-switch-2{display:block;float:left;margin:0 10px 0 0;position:relative}.form-group .paper-switch-2 input,.form-group .paper-switch input{height:0;opacity:0;width:0}.form-group .paper-switch-2 input:checked+.paper-switch-slider,.form-group .paper-switch input:checked+.paper-switch-slider{background-color:#41403e;background-color:var(--success-light)}.form-group .paper-switch-2 input:checked+.paper-switch-slider:before,.form-group .paper-switch input:checked+.paper-switch-slider:before{transform:translateX(26px)}.form-group .paper-switch-2 input:focus+.paper-switch-slider,.form-group .paper-switch input:focus+.paper-switch-slider{box-shadow:0 0 3px #0071de}.form-group .paper-switch-2 .paper-switch-slider,.form-group .paper-switch .paper-switch-slider{border-bottom-left-radius:15px 255px;border-bottom-right-radius:225px 15px;border-top-left-radius:255px 15px;border-top-right-radius:15px 225px;border:2px solid #41403e;border-color:var(--primary);bottom:0;cursor:pointer;left:0;position:absolute;right:0;top:0;transition:.4s}.form-group .paper-switch-2 .paper-switch-slider:before,.form-group .paper-switch .paper-switch-slider:before{background:#41403e;background:var(--secondary);border-bottom-left-radius:15px 255px;border-bottom-right-radius:225px 15px;border-top-left-radius:255px 15px;border-top-right-radius:15px 225px;content:"";left:4px;position:absolute;transition:.4s}.form-group .paper-switch-2 .paper-switch-slider.round,.form-group .paper-switch .paper-switch-slider.round{border-bottom-left-radius:.7rem 1rem;border-bottom-right-radius:1rem .9rem;border-top-left-radius:1rem 1rem;border-top-right-radius:1rem .6rem;border:2px solid #41403e;border-color:var(--primary)}.form-group .paper-switch-2 .paper-switch-slider.round:before,.form-group .paper-switch .paper-switch-slider.round:before{background:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100'%3E%3Cpath fill='%230071de' d='M49.346 46.341c-3.79-2.005 3.698-10.294 7.984-8.89 8.713 2.852 4.352 20.922-4.901 20.269-4.684-.33-12.616-7.405-14.38-11.818-2.375-5.938 7.208-11.688 11.624-13.837 9.078-4.42 18.403-3.503 22.784 6.651 4.049 9.378 6.206 28.09-1.462 36.276-7.091 7.567-24.673 2.277-32.357-1.079-11.474-5.01-24.54-19.124-21.738-32.758 3.958-19.263 28.856-28.248 46.044-23.244 20.693 6.025 22.012 36.268 16.246 52.826-5.267 15.118-17.03 26.26-33.603 21.938-11.054-2.883-20.984-10.949-28.809-18.908C9.236 66.096 2.704 57.597 6.01 46.371c3.059-10.385 12.719-20.155 20.892-26.604C40.809 8.788 58.615 1.851 75.058 12.031c9.289 5.749 16.787 16.361 18.284 27.262.643 4.698.646 10.775-3.811 13.746'/%3E%3C/svg%3E") 0 no-repeat;border-bottom-left-radius:.7rem 1rem;border-bottom-right-radius:1rem .9rem;border-top-left-radius:1rem 1rem;border-top-right-radius:1rem .6rem;left:4px}.form-group .paper-switch{height:12px;width:60px}.form-group .paper-switch .paper-switch-slider:before{bottom:-6px;height:20px;width:20px}.form-group .paper-switch .paper-switch-slider.round:before{bottom:-7px;height:23px;width:23px}.form-group .paper-switch-2{height:22px;width:50px}.form-group .paper-switch-2 .paper-switch-slider.round:before,.form-group .paper-switch-2 .paper-switch-slider:before{bottom:2px;height:14px;width:14px}.form-group .paper-switch-tile{cursor:pointer;display:block;float:left;height:80px;margin:40px 0 0 40px;perspective:1000px;position:relative;transform:translate(-50%,-50%);transform-style:preserve-3d;width:80px}.form-group .paper-switch-tile:hover .paper-switch-tile-card{box-shadow:2px 8px 4px -5px rgba(0,0,0,.2);transform:rotateX(30deg)}.form-group .paper-switch-tile:hover:checked+.paper-switch-tile-card{background-color:transparent;box-shadow:0 10px 15px -15px rgba(0,0,0,.9);transform:rotateX(150deg)}.form-group .paper-switch-tile input{display:none}.form-group .paper-switch-tile input:checked+.paper-switch-tile-card{transform:rotateX(180deg)}.form-group .paper-switch-tile-card{background-color:transparent;border-color:transparent;height:100%;position:relative;transform-style:preserve-3d;transition:all .6s;width:100%}.form-group .paper-switch-tile-card div{-webkit-backface-visibility:hidden;backface-visibility:hidden;box-shadow:2px 8px 8px -5px rgba(0,0,0,.3);height:100%;line-height:70px;position:absolute;text-align:center;width:100%}.form-group .paper-switch-tile-card .paper-switch-tile-card-back{transform:rotateX(180deg)}.form-group input[type=range]{-webkit-appearance:none;-moz-appearance:none;appearance:none;border-width:0;padding:0}.form-group input[type=range]::-webkit-slider-runnable-track{background:#41403e;background:var(--secondary);border-radius:18px;border:1px solid #41403e;border-color:var(--primary);box-shadow:1px 1px 1px #000,0 0 1px #0d0d0d;cursor:pointer;height:8px;margin:10px 0;width:100%}.form-group input[type=range]::-webkit-slider-thumb{background:#41403e;background:var(--white);-webkit-appearance:none;appearance:none;border-bottom-left-radius:.7rem 1rem;border-bottom-right-radius:1rem .9rem;border-top-left-radius:1rem 1rem;border-top-right-radius:1rem .6rem;border:1px solid #41403e;border-color:var(--primary);box-shadow:1px 1px 1px #000,0 0 1px #0d0d0d;cursor:pointer;height:36px;margin-top:-14px;width:16px}.form-group input[type=range]::-moz-range-track{background:#41403e;background:var(--secondary);border-color:#41403e;border-color:var(--primary);border-radius:18px;box-shadow:1px 1px 1px #000,0 0 1px #0d0d0d;cursor:pointer;height:8px;width:100%}.form-group input[type=range]::-moz-range-thumb{background:#41403e;background:var(--white);border-bottom-left-radius:.7rem 1rem;border-bottom-right-radius:1rem .9rem;border-top-left-radius:1rem 1rem;border-top-right-radius:1rem .6rem;border:1px solid #41403e;border-color:var(--primary);box-shadow:1px 1px 1px #000,0 0 1px #0d0d0d;cursor:pointer;height:36px;width:16px}.form-group input[type=range]::-ms-track{background:transparent;border-color:transparent;border-width:16px 0;color:transparent;cursor:pointer;height:8px;width:100%}.form-group input[type=range]::-ms-fill-lower,.form-group input[type=range]::-ms-fill-upper{background:#41403e;background:var(--secondary);border-radius:18px;border:1px solid #41403e;border-color:var(--primary);box-shadow:1px 1px 1px #000,0 0 1px #0d0d0d}.form-group input[type=range]::-ms-thumb{background:#41403e;background:var(--white);border-bottom-left-radius:.7rem 1rem;border-bottom-right-radius:1rem .9rem;border-top-left-radius:1rem 1rem;border-top-right-radius:1rem .6rem;border:1px solid #41403e;box-shadow:1px 1px 1px #000,0 0 1px #0d0d0d;cursor:pointer;height:36px;width:16px}fieldset.form-group{border:0;padding:0}.modal{transition:opacity 235ms ease-in-out 0s;background:rgba(0,0,0,.6);flex:1 1 auto;opacity:0;position:fixed;text-align:left;visibility:hidden;word-wrap:break-word;z-index:12}.modal,.modal-bg{bottom:0;left:0;right:0;top:0}.modal-bg{cursor:pointer;position:absolute}.modal .modal-body{color:#41403e;color:var(--primary);background:#41403e;background:var(--main-background);transition:all 235ms ease-in-out 0s;-webkit-backface-visibility:hidden;backface-visibility:hidden;border:2px solid;left:50%;padding:1.25rem;position:absolute;top:0;transform:translate(-50%,-50%)}@media only screen and (max-width:768px){.modal .modal-body{box-sizing:border-box;width:90%}}.modal .btn-close{color:#41403e;color:var(--primary-light);transition:all 235ms ease-in-out 0s;cursor:pointer;font-size:30px;height:1.1rem;position:absolute;right:1rem;text-decoration:none;top:1rem;width:1.1rem}.modal .btn-close:active,.modal .btn-close:focus,.modal .btn-close:hover{color:#41403e;color:var(--primary)}.modal .modal-title,.modal h4{margin-bottom:.5rem;margin-top:0}.modal .modal-subtitle,.modal h5{color:#41403e;color:var(--secondary);margin-bottom:.5rem;margin-top:0}.modal .modal-text,.modal p{margin-bottom:1rem;margin-top:0}.modal .modal-link+.modal-link,.modal a+a{margin-left:1.25rem}.modal .paper-btn{background:#41403e;background:var(--main-background);display:inline-block;text-decoration:none}.modal .modal-link,.modal a{background-image:linear-gradient(5deg,transparent 65%,#0071de 80%,transparent 90%),linear-gradient(165deg,transparent 5%,#0071de 15%,transparent 25%),linear-gradient(165deg,transparent 45%,#0071de 55%,transparent 65%),linear-gradient(15deg,transparent 25%,#0071de 35%,transparent 50%);background-position:0 90%;background-repeat:repeat-x;background-size:4px 3px;cursor:pointer;text-decoration:none}.modal .modal-link:focus,.modal .modal-link:hover,.modal .modal-link:visited,.modal a:focus,.modal a:hover,.modal a:visited{color:#41403e;color:var(--primary);text-decoration:none}.modal-state{display:none}.modal-state:checked+.modal{opacity:1;visibility:visible}.modal-state:checked+.modal .modal-body{top:50%}[popover-bottom],[popover-left],[popover-right],[popover-top]{margin:24px;position:relative}[popover-bottom]:hover:after,[popover-left]:hover:after,[popover-right]:hover:after,[popover-top]:hover:after{opacity:1;transition:opacity .2s ease-out}[popover-bottom]:after,[popover-left]:after,[popover-right]:after,[popover-top]:after{border-bottom-left-radius:15px 255px;border-bottom-right-radius:225px 15px;border-top-left-radius:255px 15px;border-top-right-radius:15px 225px;transition:opacity 235ms ease-in-out 0s;background-color:#41403e;background-color:var(--light-dark);border:2px solid #41403e;border-color:var(--primary);color:#fff;font-size:.7em;left:50%;min-width:80px;opacity:0;padding:4px 2px;position:absolute;text-align:center;top:-6px;transform:translateX(-50%) translateY(-100%)}[popover-left]:before{left:0;margin-left:-12px;top:50%;transform:translateY(-50%) rotate(-90deg)}[popover-left]:after{content:attr(popover-left);left:0;margin-left:-8px;top:50%;transform:translateX(-100%) translateY(-50%)}[popover-right]:before{left:100%;margin-left:1px;top:50%;transform:translatey(-50%) rotate(90deg)}[popover-right]:after{content:attr(popover-right);left:100%;margin-left:8px;top:50%;transform:translateX(0) translateY(-50%)}[popover-top]:before{left:50%}[popover-top]:after{content:attr(popover-top);left:50%}[popover-bottom]:before{margin-top:8px;top:100%;transform:translateX(-50%) translatey(-100%) rotate(-180deg)}[popover-bottom]:after{content:attr(popover-bottom);margin-top:8px;top:100%;transform:translateX(-50%) translateY(0)}.progress{border-bottom-left-radius:20px 115px;border-bottom-right-radius:15px 105px;border-top-left-radius:250px 15px;border-top-right-radius:25px 80px;border:2px solid;box-shadow:2px 8px 8px -5px rgba(0,0,0,.3);height:1.2rem;overflow:hidden;width:100%}.progress .bar{border-bottom-left-radius:20px 115px;border-bottom-right-radius:15px 105px;border-top-left-radius:250px 15px;border-top-right-radius:25px 80px;transition:all 235ms ease-in-out 0s;background-color:#41403e;background-color:var(--primary-light);border-color:#41403e;border-color:var(--primary);border-right:2px solid;display:flex;flex-direction:column;font-size:.6rem;height:100%;justify-content:center;text-align:center;width:0}.progress .bar.striped{background:repeating-linear-gradient(45deg,#c1c0bd,#c1c0bd .25rem,#a8a6a3 0,#a8a6a3 .5rem)}.progress .bar.primary{background-color:#41403e;background-color:var(--primary-light)}.progress .bar.primary.striped{background:repeating-linear-gradient(45deg,#c1c0bd,#c1c0bd .25rem,#a8a6a3 0,#a8a6a3 .5rem)}.progress .bar.secondary{background-color:#41403e;background-color:var(--secondary-light)}.progress .bar.secondary.striped{background:repeating-linear-gradient(45deg,#deefff,#deefff .25rem,#abd6ff 0,#abd6ff .5rem)}.progress .bar.success{background-color:#41403e;background-color:var(--success-light)}.progress .bar.success.striped{background:repeating-linear-gradient(45deg,#d0dbc2,#d0dbc2 .25rem,#b7c9a1 0,#b7c9a1 .5rem)}.progress .bar.warning{background-color:#41403e;background-color:var(--warning-light)}.progress .bar.warning.striped{background:repeating-linear-gradient(45deg,#f5f0c6,#f5f0c6 .25rem,#ede49b 0,#ede49b .5rem)}.progress .bar.danger{background-color:#41403e;background-color:var(--danger-light)}.progress .bar.danger.striped{background:repeating-linear-gradient(45deg,#f0cbc9,#f0cbc9 .25rem,#e6a5a1 0,#e6a5a1 .5rem)}.progress .bar.muted{background-color:#41403e;background-color:var(--muted-light)}.progress .bar.muted.striped{background:repeating-linear-gradient(45deg,#e6e7e9,#e6e7e9 .25rem,#caced1 0,#caced1 .5rem)}.progress .bar.w-0{width:0}.progress .bar.w-1{width:1%}.progress .bar.w-2{width:2%}.progress .bar.w-3{width:3%}.progress .bar.w-4{width:4%}.progress .bar.w-5{width:5%}.progress .bar.w-6{width:6%}.progress .bar.w-7{width:7%}.progress .bar.w-8{width:8%}.progress .bar.w-9{width:9%}.progress .bar.w-10{width:10%}.progress .bar.w-11{width:11%}.progress .bar.w-12{width:12%}.progress .bar.w-13{width:13%}.progress .bar.w-14{width:14%}.progress .bar.w-15{width:15%}.progress .bar.w-16{width:16%}.progress .bar.w-17{width:17%}.progress .bar.w-18{width:18%}.progress .bar.w-19{width:19%}.progress .bar.w-20{width:20%}.progress .bar.w-21{width:21%}.progress .bar.w-22{width:22%}.progress .bar.w-23{width:23%}.progress .bar.w-24{width:24%}.progress .bar.w-25{width:25%}.progress .bar.w-26{width:26%}.progress .bar.w-27{width:27%}.progress .bar.w-28{width:28%}.progress .bar.w-29{width:29%}.progress .bar.w-30{width:30%}.progress .bar.w-31{width:31%}.progress .bar.w-32{width:32%}.progress .bar.w-33{width:33%}.progress .bar.w-34{width:34%}.progress .bar.w-35{width:35%}.progress .bar.w-36{width:36%}.progress .bar.w-37{width:37%}.progress .bar.w-38{width:38%}.progress .bar.w-39{width:39%}.progress .bar.w-40{width:40%}.progress .bar.w-41{width:41%}.progress .bar.w-42{width:42%}.progress .bar.w-43{width:43%}.progress .bar.w-44{width:44%}.progress .bar.w-45{width:45%}.progress .bar.w-46{width:46%}.progress .bar.w-47{width:47%}.progress .bar.w-48{width:48%}.progress .bar.w-49{width:49%}.progress .bar.w-50{width:50%}.progress .bar.w-51{width:51%}.progress .bar.w-52{width:52%}.progress .bar.w-53{width:53%}.progress .bar.w-54{width:54%}.progress .bar.w-55{width:55%}.progress .bar.w-56{width:56%}.progress .bar.w-57{width:57%}.progress .bar.w-58{width:58%}.progress .bar.w-59{width:59%}.progress .bar.w-60{width:60%}.progress .bar.w-61{width:61%}.progress .bar.w-62{width:62%}.progress .bar.w-63{width:63%}.progress .bar.w-64{width:64%}.progress .bar.w-65{width:65%}.progress .bar.w-66{width:66%}.progress .bar.w-67{width:67%}.progress .bar.w-68{width:68%}.progress .bar.w-69{width:69%}.progress .bar.w-70{width:70%}.progress .bar.w-71{width:71%}.progress .bar.w-72{width:72%}.progress .bar.w-73{width:73%}.progress .bar.w-74{width:74%}.progress .bar.w-75{width:75%}.progress .bar.w-76{width:76%}.progress .bar.w-77{width:77%}.progress .bar.w-78{width:78%}.progress .bar.w-79{width:79%}.progress .bar.w-80{width:80%}.progress .bar.w-81{width:81%}.progress .bar.w-82{width:82%}.progress .bar.w-83{width:83%}.progress .bar.w-84{width:84%}.progress .bar.w-85{width:85%}.progress .bar.w-86{width:86%}.progress .bar.w-87{width:87%}.progress .bar.w-88{width:88%}.progress .bar.w-89{width:89%}.progress .bar.w-90{width:90%}.progress .bar.w-91{width:91%}.progress .bar.w-92{width:92%}.progress .bar.w-93{width:93%}.progress .bar.w-94{width:94%}.progress .bar.w-95{width:95%}.progress .bar.w-96{width:96%}.progress .bar.w-97{width:97%}.progress .bar.w-98{width:98%}.progress .bar.w-99{width:99%}.progress .bar.w-100{width:100%}.progress .bar.w-0,.progress .bar.w-100{border-right:0}.tabs .content{display:none;flex-basis:100%;padding:.75rem 0 0}.tabs input{display:none}.tabs input:checked+label{color:#41403e;color:var(--primary);border-bottom:3px solid #41403e;border-bottom-color:var(--secondary)}.tabs input[id$=tab1]:checked~div[id$=content1],.tabs input[id$=tab2]:checked~div[id$=content2],.tabs input[id$=tab3]:checked~div[id$=content3],.tabs input[id$=tab4]:checked~div[id$=content4],.tabs input[id$=tab5]:checked~div[id$=content5]{display:block}.tabs label{color:#41403e;color:var(--primary-light);display:inline-block;font-weight:600;margin:0 0 -1px;padding:.75rem;text-align:center}.tabs label:hover{color:#41403e;color:var(--muted);cursor:pointer}.margin{margin:1rem}.margin-top{margin-top:1rem}.margin-top-large{margin-top:2rem}.margin-top-small{margin-top:.5rem}.margin-top-none{margin-top:0}.margin-right{margin-right:1rem}.margin-right-large{margin-right:2rem}.margin-right-small{margin-right:.5rem}.margin-right-none{margin-right:0}.margin-bottom{margin-bottom:1rem}.margin-bottom-large{margin-bottom:2rem}.margin-bottom-small{margin-bottom:.5rem}.margin-bottom-none{margin-bottom:0}.margin-left{margin-left:1rem}.margin-left-large{margin-left:2rem}.margin-left-small{margin-left:.5rem}.margin-left-none{margin-left:0}.margin-large{margin:2rem}.margin-small{margin:.5rem}.margin-none{margin:0}.padding{padding:1rem}.padding-top{padding-top:1rem}.padding-top-large{padding-top:2rem}.padding-top-small{padding-top:.5rem}.padding-top-none{padding-top:0}.padding-right{padding-right:1rem}.padding-right-large{padding-right:2rem}.padding-right-small{padding-right:.5rem}.padding-right-none{padding-right:0}.padding-bottom{padding-bottom:1rem}.padding-bottom-large{padding-bottom:2rem}.padding-bottom-small{padding-bottom:.5rem}.padding-bottom-none{padding-bottom:0}.padding-left{padding-left:1rem}.padding-left-large{padding-left:2rem}.padding-left-small{padding-left:.5rem}.padding-left-none{padding-left:0}.padding-large{padding:2rem}.padding-small{padding:.5rem}.padding-none{padding:0}nav{background-color:#41403e;background-color:var(--main-background);display:flex;padding:.3rem;position:relative;width:100%;z-index:100}@media only screen and (max-width:768px){nav{display:block}}nav .bar1,nav .bar2,nav .bar3{background-color:#41403e;background-color:var(--primary);border-color:#41403e;border-color:var(--primary);color:#41403e;color:var(--primary);border-bottom-left-radius:15px 5px;border-bottom-right-radius:15px 3px;margin:6px 0;transition:.4s;width:2rem}nav .collapsible input[id^=collapsible]:checked+button .bar1,nav .collapsible input[id^=collapsible]:checked+label .bar1{transform:rotate(-45deg) translate(-9px,7px)}nav .collapsible input[id^=collapsible]:checked+button .bar2,nav .collapsible input[id^=collapsible]:checked+label .bar2{opacity:0}nav .collapsible input[id^=collapsible]:checked+button .bar3,nav .collapsible input[id^=collapsible]:checked+label .bar3{transform:rotate(45deg) translate(-8px,-9px)}nav.split-nav{justify-content:space-between}nav.fixed{left:0;position:fixed;right:0;top:0}nav div{margin:0 1rem}nav ul.inline{margin-bottom:0;margin-top:10px;padding:0}nav ul.inline li{display:inline-block;margin:0 .5rem}@media only screen and (max-width:768px){nav ul.inline li{display:block;margin:1rem 0}}nav a{color:#41403e;color:var(--primary);background-image:none;border-bottom-left-radius:15px 3px;border-bottom-right-radius:15px 5px;border-bottom:5px solid #41403e;border-bottom-color:var(--primary);padding-bottom:.1rem}nav a:hover{border-color:#41403e;border-bottom:5px solid;border-color:var(--primary-light)}nav ul.inline li a{font-size:1.3rem}nav ul.inline li:before{content:""}@media only screen and (max-width:992px){nav ul{text-align:center}}nav .nav-brand h1,nav .nav-brand h2,nav .nav-brand h3,nav .nav-brand h4,nav .nav-brand h5,nav .nav-brand h6{margin:0 0 .2rem}@media only screen and (max-width:768px){nav .collapsible{width:100%}}nav .collapsible input[id^=collapsible]:checked~div.collapsible-body{margin:0;max-height:960px;opacity:1;padding:0}nav .collapsible .collapsible-body,nav .collapsible:first-of-type{border:0}@media only screen and (min-width:769px){nav .collapsible .collapsible-body,nav .collapsible:first-of-type{display:contents}}nav div.collapsible-body{padding:none}nav .collapsible label{border-bottom-left-radius:15px 255px;border-bottom-right-radius:225px 15px;border-top-left-radius:255px 15px;border-top-right-radius:15px 225px;border:2px solid #41403e;border-color:var(--primary)}nav .collapsible>button{border:0}nav .collapsible>button,nav .collapsible>label{background-color:#41403e;background-color:var(--main-background);display:none;font-size:.5rem;margin-right:1rem;padding:.25rem;position:absolute;right:0;top:.2rem}@media only screen and (max-width:768px){nav .collapsible>button,nav .collapsible>label{display:block}} \ No newline at end of file diff --git a/public/JS/firstExample.app.js b/public/JS/firstExample.app.js new file mode 100644 index 0000000..04e4414 --- /dev/null +++ b/public/JS/firstExample.app.js @@ -0,0 +1,409 @@ +/******/ (() => { // webpackBootstrap +/******/ var __webpack_modules__ = ({ + +/***/ "./node_modules/papaparse/papaparse.min.js": +/*!*************************************************!*\ + !*** ./node_modules/papaparse/papaparse.min.js ***! + \*************************************************/ +/***/ (function(module, exports) { + +var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/* @license +Papa Parse +v5.3.1 +https://github.com/mholt/PapaParse +License: MIT +*/ +!function(e,t){ true?!(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_FACTORY__ = (t), + __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? + (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), + __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)):0}(this,function s(){"use strict";var f="undefined"!=typeof self?self:"undefined"!=typeof window?window:void 0!==f?f:{};var n=!f.document&&!!f.postMessage,o=n&&/blob:/i.test((f.location||{}).protocol),a={},h=0,b={parse:function(e,t){var i=(t=t||{}).dynamicTyping||!1;M(i)&&(t.dynamicTypingFunction=i,i={});if(t.dynamicTyping=i,t.transform=!!M(t.transform)&&t.transform,t.worker&&b.WORKERS_SUPPORTED){var r=function(){if(!b.WORKERS_SUPPORTED)return!1;var e=(i=f.URL||f.webkitURL||null,r=s.toString(),b.BLOB_URL||(b.BLOB_URL=i.createObjectURL(new Blob(["(",r,")();"],{type:"text/javascript"})))),t=new f.Worker(e);var i,r;return t.onmessage=_,t.id=h++,a[t.id]=t}();return r.userStep=t.step,r.userChunk=t.chunk,r.userComplete=t.complete,r.userError=t.error,t.step=M(t.step),t.chunk=M(t.chunk),t.complete=M(t.complete),t.error=M(t.error),delete t.worker,void r.postMessage({input:e,config:t,workerId:r.id})}var n=null;b.NODE_STREAM_INPUT,"string"==typeof e?n=t.download?new l(t):new p(t):!0===e.readable&&M(e.read)&&M(e.on)?n=new g(t):(f.File&&e instanceof File||e instanceof Object)&&(n=new c(t));return n.stream(e)},unparse:function(e,t){var n=!1,_=!0,m=",",y="\r\n",s='"',a=s+s,i=!1,r=null,o=!1;!function(){if("object"!=typeof t)return;"string"!=typeof t.delimiter||b.BAD_DELIMITERS.filter(function(e){return-1!==t.delimiter.indexOf(e)}).length||(m=t.delimiter);("boolean"==typeof t.quotes||"function"==typeof t.quotes||Array.isArray(t.quotes))&&(n=t.quotes);"boolean"!=typeof t.skipEmptyLines&&"string"!=typeof t.skipEmptyLines||(i=t.skipEmptyLines);"string"==typeof t.newline&&(y=t.newline);"string"==typeof t.quoteChar&&(s=t.quoteChar);"boolean"==typeof t.header&&(_=t.header);if(Array.isArray(t.columns)){if(0===t.columns.length)throw new Error("Option columns is empty");r=t.columns}void 0!==t.escapeChar&&(a=t.escapeChar+s);"boolean"==typeof t.escapeFormulae&&(o=t.escapeFormulae)}();var h=new RegExp(j(s),"g");"string"==typeof e&&(e=JSON.parse(e));if(Array.isArray(e)){if(!e.length||Array.isArray(e[0]))return u(null,e,i);if("object"==typeof e[0])return u(r||Object.keys(e[0]),e,i)}else if("object"==typeof e)return"string"==typeof e.data&&(e.data=JSON.parse(e.data)),Array.isArray(e.data)&&(e.fields||(e.fields=e.meta&&e.meta.fields),e.fields||(e.fields=Array.isArray(e.data[0])?e.fields:"object"==typeof e.data[0]?Object.keys(e.data[0]):[]),Array.isArray(e.data[0])||"object"==typeof e.data[0]||(e.data=[e.data])),u(e.fields||[],e.data||[],i);throw new Error("Unable to serialize unrecognized input");function u(e,t,i){var r="";"string"==typeof e&&(e=JSON.parse(e)),"string"==typeof t&&(t=JSON.parse(t));var n=Array.isArray(e)&&0=this._config.preview;if(o)f.postMessage({results:n,workerId:b.WORKER_ID,finished:a});else if(M(this._config.chunk)&&!t){if(this._config.chunk(n,this._handle),this._handle.paused()||this._handle.aborted())return void(this._halted=!0);n=void 0,this._completeResults=void 0}return this._config.step||this._config.chunk||(this._completeResults.data=this._completeResults.data.concat(n.data),this._completeResults.errors=this._completeResults.errors.concat(n.errors),this._completeResults.meta=n.meta),this._completed||!a||!M(this._config.complete)||n&&n.meta.aborted||(this._config.complete(this._completeResults,this._input),this._completed=!0),a||n&&n.meta.paused||this._nextChunk(),n}this._halted=!0},this._sendError=function(e){M(this._config.error)?this._config.error(e):o&&this._config.error&&f.postMessage({workerId:b.WORKER_ID,error:e,finished:!1})}}function l(e){var r;(e=e||{}).chunkSize||(e.chunkSize=b.RemoteChunkSize),u.call(this,e),this._nextChunk=n?function(){this._readChunk(),this._chunkLoaded()}:function(){this._readChunk()},this.stream=function(e){this._input=e,this._nextChunk()},this._readChunk=function(){if(this._finished)this._chunkLoaded();else{if(r=new XMLHttpRequest,this._config.withCredentials&&(r.withCredentials=this._config.withCredentials),n||(r.onload=v(this._chunkLoaded,this),r.onerror=v(this._chunkError,this)),r.open(this._config.downloadRequestBody?"POST":"GET",this._input,!n),this._config.downloadRequestHeaders){var e=this._config.downloadRequestHeaders;for(var t in e)r.setRequestHeader(t,e[t])}if(this._config.chunkSize){var i=this._start+this._config.chunkSize-1;r.setRequestHeader("Range","bytes="+this._start+"-"+i)}try{r.send(this._config.downloadRequestBody)}catch(e){this._chunkError(e.message)}n&&0===r.status&&this._chunkError()}},this._chunkLoaded=function(){4===r.readyState&&(r.status<200||400<=r.status?this._chunkError():(this._start+=this._config.chunkSize?this._config.chunkSize:r.responseText.length,this._finished=!this._config.chunkSize||this._start>=function(e){var t=e.getResponseHeader("Content-Range");if(null===t)return-1;return parseInt(t.substring(t.lastIndexOf("/")+1))}(r),this.parseChunk(r.responseText)))},this._chunkError=function(e){var t=r.statusText||e;this._sendError(new Error(t))}}function c(e){var r,n;(e=e||{}).chunkSize||(e.chunkSize=b.LocalChunkSize),u.call(this,e);var s="undefined"!=typeof FileReader;this.stream=function(e){this._input=e,n=e.slice||e.webkitSlice||e.mozSlice,s?((r=new FileReader).onload=v(this._chunkLoaded,this),r.onerror=v(this._chunkError,this)):r=new FileReaderSync,this._nextChunk()},this._nextChunk=function(){this._finished||this._config.preview&&!(this._rowCount=this._input.size,this.parseChunk(e.target.result)},this._chunkError=function(){this._sendError(r.error)}}function p(e){var i;u.call(this,e=e||{}),this.stream=function(e){return i=e,this._nextChunk()},this._nextChunk=function(){if(!this._finished){var e,t=this._config.chunkSize;return t?(e=i.substring(0,t),i=i.substring(t)):(e=i,i=""),this._finished=!i,this.parseChunk(e)}}}function g(e){u.call(this,e=e||{});var t=[],i=!0,r=!1;this.pause=function(){u.prototype.pause.apply(this,arguments),this._input.pause()},this.resume=function(){u.prototype.resume.apply(this,arguments),this._input.resume()},this.stream=function(e){this._input=e,this._input.on("data",this._streamData),this._input.on("end",this._streamEnd),this._input.on("error",this._streamError)},this._checkIsFinished=function(){r&&1===t.length&&(this._finished=!0)},this._nextChunk=function(){this._checkIsFinished(),t.length?this.parseChunk(t.shift()):i=!0},this._streamData=v(function(e){try{t.push("string"==typeof e?e:e.toString(this._config.encoding)),i&&(i=!1,this._checkIsFinished(),this.parseChunk(t.shift()))}catch(e){this._streamError(e)}},this),this._streamError=v(function(e){this._streamCleanUp(),this._sendError(e)},this),this._streamEnd=v(function(){this._streamCleanUp(),r=!0,this._streamData("")},this),this._streamCleanUp=v(function(){this._input.removeListener("data",this._streamData),this._input.removeListener("end",this._streamEnd),this._input.removeListener("error",this._streamError)},this)}function i(m){var a,o,h,r=Math.pow(2,53),n=-r,s=/^\s*-?(\d+\.?|\.\d+|\d+\.\d+)([eE][-+]?\d+)?\s*$/,u=/^(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d\.\d+([+-][0-2]\d:[0-5]\d|Z))|(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d([+-][0-2]\d:[0-5]\d|Z))|(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d([+-][0-2]\d:[0-5]\d|Z))$/,t=this,i=0,f=0,d=!1,e=!1,l=[],c={data:[],errors:[],meta:{}};if(M(m.step)){var p=m.step;m.step=function(e){if(c=e,_())g();else{if(g(),0===c.data.length)return;i+=e.data.length,m.preview&&i>m.preview?o.abort():(c.data=c.data[0],p(c,t))}}}function y(e){return"greedy"===m.skipEmptyLines?""===e.join("").trim():1===e.length&&0===e[0].length}function g(){if(c&&h&&(k("Delimiter","UndetectableDelimiter","Unable to auto-detect delimiting character; defaulted to '"+b.DefaultDelimiter+"'"),h=!1),m.skipEmptyLines)for(var e=0;e=l.length?"__parsed_extra":l[i]),m.transform&&(s=m.transform(s,n)),s=v(n,s),"__parsed_extra"===n?(r[n]=r[n]||[],r[n].push(s)):r[n]=s}return m.header&&(i>l.length?k("FieldMismatch","TooManyFields","Too many fields: expected "+l.length+" fields but parsed "+i,f+t):i=r.length/2?"\r\n":"\r"}(e,r)),h=!1,m.delimiter)M(m.delimiter)&&(m.delimiter=m.delimiter(e),c.meta.delimiter=m.delimiter);else{var n=function(e,t,i,r,n){var s,a,o,h;n=n||[",","\t","|",";",b.RECORD_SEP,b.UNIT_SEP];for(var u=0;u=D)return C(!0)}else for(m=F,F++;;){if(-1===(m=r.indexOf(S,m+1)))return i||u.push({type:"Quotes",code:"MissingQuotes",message:"Quoted field unterminated",row:h.length,index:F}),E();if(m===n-1)return E(r.substring(F,m).replace(_,S));if(S!==L||r[m+1]!==L){if(S===L||0===m||r[m-1]!==L){-1!==p&&p=D)return C(!0);break}u.push({type:"Quotes",code:"InvalidQuotes",message:"Trailing quote on quoted field is malformed",row:h.length,index:F}),m++}}else m++}return E();function k(e){h.push(e),d=F}function b(e){var t=0;if(-1!==e){var i=r.substring(m+1,e);i&&""===i.trim()&&(t=i.length)}return t}function E(e){return i||(void 0===e&&(e=r.substring(F)),f.push(e),F=n,k(f),o&&R()),C()}function w(e){F=e,k(f),f=[],g=r.indexOf(x,F)}function C(e){return{data:h,errors:u,meta:{delimiter:O,linebreak:x,aborted:z,truncated:!!e,cursor:d+(t||0)}}}function R(){T(C()),h=[],u=[]}},this.abort=function(){z=!0},this.getCharIndex=function(){return F}}function _(e){var t=e.data,i=a[t.workerId],r=!1;if(t.error)i.userError(t.error,t.file);else if(t.results&&t.results.data){var n={abort:function(){r=!0,m(t.workerId,{data:[],errors:[],meta:{aborted:!0}})},pause:y,resume:y};if(M(i.userStep)){for(var s=0;s { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "freeCSV2HTML": () => (/* binding */ freeCSV2HTML) +/* harmony export */ }); +var __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __generator = (undefined && undefined.__generator) || function (thisArg, body) { + var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; + return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; + function verb(n) { return function (v) { return step([n, v]); }; } + function step(op) { + if (f) throw new TypeError("Generator is already executing."); + while (_) try { + if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; + if (y = 0, t) op = [op[0] & 2, t.value]; + switch (op[0]) { + case 0: case 1: t = op; break; + case 4: _.label++; return { value: op[1], done: false }; + case 5: _.label++; y = op[1]; op = [0]; continue; + case 7: op = _.ops.pop(); _.trys.pop(); continue; + default: + if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } + if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } + if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } + if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } + if (t[2]) _.ops.pop(); + _.trys.pop(); continue; + } + op = body.call(thisArg, _); + } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } + if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; + } +}; +var Papa = __webpack_require__(/*! papaparse */ "./node_modules/papaparse/papaparse.min.js"); +var errors = __webpack_require__(/*! ./errors.js */ "./src/errors.js"); +var freeCSV2HTML = (function () { + function freeCSV2HTML() { + this._datasViewElt = { id: "", eltDOM: undefined }; + this._datasSourceUrl = ""; + this._datasSelectors = []; + this.parseMeta = undefined; + this.parseDatas = []; + this.parseErrors = []; + this.datasHTML = ""; + this.stopIfParseErrors = false; + } + Object.defineProperty(freeCSV2HTML.prototype, "datasViewElt", { + set: function (elt) { + var checkContainerExist = document.getElementById(elt.id); + if (checkContainerExist === null) + throw new Error(errors.elementNotFound + elt.id); + else { + this._datasViewElt.id = elt.id; + this._datasViewElt.eltDOM = checkContainerExist; + } + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(freeCSV2HTML.prototype, "datasSourceUrl", { + set: function (url) { + if (url.trim().length === 0) + throw new Error(errors.needUrl); + else + this._datasSourceUrl = url.trim(); + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(freeCSV2HTML.prototype, "datasSelectors", { + get: function () { + return this._datasSelectors; + }, + set: function (selectionElts) { + this._datasSelectors = []; + var checkContainerExist; + for (var i = 0; i < selectionElts.length; i++) { + checkContainerExist = document.getElementById(selectionElts[i].id); + if (checkContainerExist === null) + console.error(errors.elementNotFound + selectionElts[i].id); + else if (Number.isInteger(selectionElts[i].colCSV) === false || selectionElts[i].colCSV < 0) + console.error(errors.needNaturalNumber); + else { + selectionElts[i].eltDOM = checkContainerExist; + this._datasSelectors.push(selectionElts[i]); + } + } + }, + enumerable: false, + configurable: true + }); + freeCSV2HTML.prototype.parse = function () { + return __awaiter(this, void 0, void 0, function () { + var converter; + return __generator(this, function (_a) { + converter = this; + return [2, new Promise(function (resolve, reject) { + if (converter._datasSourceUrl !== "") { + Papa.parse(converter._datasSourceUrl, { + quoteChar: '"', + header: true, + complete: function (results) { + converter.parseErrors = results.errors; + converter.parseDatas = results.data; + var realFields = []; + for (var i in results.meta.fields) { + if (results.meta.fields[i].trim() !== "") + realFields.push(results.meta.fields[i]); + } + results.meta.fields = realFields; + converter.parseMeta = results.meta; + resolve(true); + }, + error: function (error) { + reject(new Error(errors.parserFail)); + }, + download: true, + skipEmptyLines: true, + }); + } + else + reject(new Error(errors.needUrl)); + })]; + }); + }); + }; + freeCSV2HTML.prototype.run = function () { + return __awaiter(this, void 0, void 0, function () { + var converter_1, selectorsHTML, i, values, colName, row, j, selectElement; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + if (this._datasViewElt.eltDOM === undefined) + throw new Error(errors.needDatasElt); + if (this._datasSourceUrl === "") + throw new Error(errors.needUrl); + return [4, this.parse()]; + case 1: + _a.sent(); + if (this.parseDatas.length === 0 || this.parseMeta.fields === undefined) + throw new Error(errors.datasNotFound); + else if (this.stopIfParseErrors && this.parseErrors.length !== 0) + console.error(this.parseErrors); + else { + converter_1 = this; + this.datasHTML = this.createDatasHTML(this.parseMeta.fields, this.parseDatas); + this._datasViewElt.eltDOM.innerHTML = this.datasHTML; + if (this._datasSelectors.length > 0) { + selectorsHTML = []; + for (i in this._datasSelectors) { + if (this._datasSelectors[i].colCSV > (this.parseMeta.fields.length - 1)) + throw new Error(errors.selectorFieldNotFound); + else { + values = [], colName = this.parseMeta.fields[this._datasSelectors[i].colCSV]; + for (row in this.parseDatas) { + if (values.indexOf(this.parseDatas[row][colName].trim()) === -1) + values.push(this.parseDatas[row][colName].trim()); + } + if (values.length > 0) { + values.sort(); + this._datasSelectors[i].name = colName; + this._datasSelectors[i].values = values; + selectorsHTML[i] = ""; + this._datasSelectors[i].eltDOM.innerHTML = selectorsHTML[i]; + selectElement = document.getElementById("CSVDatasSelector" + i); + selectElement.addEventListener('change', function (e) { + converter_1.datasHTML = converter_1.createDatasHTML(converter_1.parseMeta.fields, converter_1.parseDatas); + converter_1._datasViewElt.eltDOM.innerHTML = converter_1.datasHTML; + }); + } + } + } + } + return [2, true]; + } + return [2]; + } + }); + }); + }; + freeCSV2HTML.prototype.createDatasHTML = function (fields, datas) { + var checkSelectorExist, filters = []; + for (var i in this._datasSelectors) { + checkSelectorExist = document.querySelector("#" + this._datasSelectors[i].id + " select"); + if (checkSelectorExist != null && checkSelectorExist.value != "0") + filters.push({ field: this._datasSelectors[i].name, value: this._datasSelectors[i].values[checkSelectorExist.selectedIndex - 1] }); + } + var datasHTML = ""; + for (var i in fields) + datasHTML += ""; + datasHTML += ""; + for (var row in datas) { + var visible = true; + if (filters.length !== 0) { + for (var i in filters) { + if (datas[row][filters[i].field].trim() != filters[i].value) + visible = false; + } + } + if (visible) { + datasHTML += ""; + for (var field in datas[row]) { + if (fields.indexOf(field) !== -1) + datasHTML += ""; + } + datasHTML += ""; + } + } + datasHTML += "
" + fields[i] + "
" + datas[row][field] + "
"; + return datasHTML; + }; + return freeCSV2HTML; +}()); + + + +/***/ }), + +/***/ "./src/errors.js": +/*!***********************!*\ + !*** ./src/errors.js ***! + \***********************/ +/***/ ((module) => { + +module.exports = +{ + datasNotFound : "Aucune donnée n'a été trouvée.", + elementNotFound : "Aucun élément HTML n'a été trouvé ayant comme \"id\" : ", + needDatasElt: "Merci de fournir un id valide pour l'élément où afficher les données.", + needNaturalNumber: "Merci de fournir un nombre entier supérieur ou égal à zéro pour désigner chaque colonne.", + needUrl: "Merci de fournir une url valide pour le fichier CSV à parser.", + parserFail: "La lecture des données du fichier a échoué.", + selectorFieldNotFound: "Au moins une des colonnes devant servir à filtrer les données n'existe pas dans le fichier.", +}; + +/***/ }) + +/******/ }); +/************************************************************************/ +/******/ // The module cache +/******/ var __webpack_module_cache__ = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ // Check if module is in cache +/******/ var cachedModule = __webpack_module_cache__[moduleId]; +/******/ if (cachedModule !== undefined) { +/******/ return cachedModule.exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = __webpack_module_cache__[moduleId] = { +/******/ // no module.id needed +/******/ // no module.loaded needed +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ __webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__); +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/************************************************************************/ +/******/ /* webpack/runtime/define property getters */ +/******/ (() => { +/******/ // define getter functions for harmony exports +/******/ __webpack_require__.d = (exports, definition) => { +/******/ for(var key in definition) { +/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { +/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); +/******/ } +/******/ } +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/hasOwnProperty shorthand */ +/******/ (() => { +/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) +/******/ })(); +/******/ +/******/ /* webpack/runtime/make namespace object */ +/******/ (() => { +/******/ // define __esModule on exports +/******/ __webpack_require__.r = (exports) => { +/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { +/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); +/******/ } +/******/ Object.defineProperty(exports, '__esModule', { value: true }); +/******/ }; +/******/ })(); +/******/ +/************************************************************************/ +var __webpack_exports__ = {}; +// This entry need to be wrapped in an IIFE because it need to be in strict mode. +(() => { +"use strict"; +/*!*****************************!*\ + !*** ./src/firstExample.ts ***! + \*****************************/ +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _freeCSV2HTML__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./freeCSV2HTML */ "./src/freeCSV2HTML.ts"); +var __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __generator = (undefined && undefined.__generator) || function (thisArg, body) { + var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; + return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; + function verb(n) { return function (v) { return step([n, v]); }; } + function step(op) { + if (f) throw new TypeError("Generator is already executing."); + while (_) try { + if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; + if (y = 0, t) op = [op[0] & 2, t.value]; + switch (op[0]) { + case 0: case 1: t = op; break; + case 4: _.label++; return { value: op[1], done: false }; + case 5: _.label++; y = op[1]; op = [0]; continue; + case 7: op = _.ops.pop(); _.trys.pop(); continue; + default: + if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } + if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } + if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } + if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } + if (t[2]) _.ops.pop(); + _.trys.pop(); continue; + } + op = body.call(thisArg, _); + } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } + if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; + } +}; + +var initialise = function () { return __awaiter(void 0, void 0, void 0, function () { + var converter, e_1; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + _a.trys.push([0, 2, , 3]); + converter = new _freeCSV2HTML__WEBPACK_IMPORTED_MODULE_0__.freeCSV2HTML(); + converter.datasViewElt = { id: "datas" }; + converter.datasSelectors = [{ colCSV: 3, id: "filtre1" }, { colCSV: 4, id: "filtre2" }]; + converter.datasSourceUrl = "http://localhost:8080/datas/elements-chimiques.csv"; + return [4, converter.run()]; + case 1: + _a.sent(); + return [3, 3]; + case 2: + e_1 = _a.sent(); + console.error(e_1); + if (document.getElementById("datas") !== null) + document.getElementById("datas").innerHTML = "Désolé, mais un problème technique empêche l'affichage des données."; + return [3, 3]; + case 3: return [2]; + } + }); +}); }; +initialise(); + +})(); + +/******/ })() +; +//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QztBQUNBLEtBQUs7QUFDTDtBQUNBLG1CQUFtQixTQUFJLElBQUksU0FBSTtBQUMvQixjQUFjLDZCQUE2QiwwQkFBMEIsY0FBYyxxQkFBcUI7QUFDeEcsaUJBQWlCLG9EQUFvRCxxRUFBcUUsY0FBYztBQUN4Six1QkFBdUIsc0JBQXNCO0FBQzdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdDQUF3QztBQUN4QyxtQ0FBbUMsU0FBUztBQUM1QyxtQ0FBbUMsV0FBVyxVQUFVO0FBQ3hELDBDQUEwQyxjQUFjO0FBQ3hEO0FBQ0EsOEdBQThHLE9BQU87QUFDckgsaUZBQWlGLGlCQUFpQjtBQUNsRyx5REFBeUQsZ0JBQWdCLFFBQVE7QUFDakYsK0NBQStDLGdCQUFnQixnQkFBZ0I7QUFDL0U7QUFDQSxrQ0FBa0M7QUFDbEM7QUFDQTtBQUNBLFVBQVUsWUFBWSxhQUFhLFNBQVMsVUFBVTtBQUN0RCxvQ0FBb0MsU0FBUztBQUM3QztBQUNBO0FBQzhDO0FBQzlDLCtCQUErQjtBQUMvQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0NBQWdDLHVEQUFZO0FBQzVDLDJDQUEyQztBQUMzQyw4Q0FBOEMsMEJBQTBCLElBQUksMEJBQTBCO0FBQ3RHO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLENBQUM7QUFDRCIsInNvdXJjZXMiOlsid2VicGFjazovL2ZyZWVkYXRhczJodG1sLy4vbm9kZV9tb2R1bGVzL3BhcGFwYXJzZS9wYXBhcGFyc2UubWluLmpzIiwid2VicGFjazovL2ZyZWVkYXRhczJodG1sLy4vc3JjL2ZyZWVDU1YySFRNTC50cyIsIndlYnBhY2s6Ly9mcmVlZGF0YXMyaHRtbC8uL3NyYy9lcnJvcnMuanMiLCJ3ZWJwYWNrOi8vZnJlZWRhdGFzMmh0bWwvd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vZnJlZWRhdGFzMmh0bWwvd2VicGFjay9ydW50aW1lL2RlZmluZSBwcm9wZXJ0eSBnZXR0ZXJzIiwid2VicGFjazovL2ZyZWVkYXRhczJodG1sL3dlYnBhY2svcnVudGltZS9oYXNPd25Qcm9wZXJ0eSBzaG9ydGhhbmQiLCJ3ZWJwYWNrOi8vZnJlZWRhdGFzMmh0bWwvd2VicGFjay9ydW50aW1lL21ha2UgbmFtZXNwYWNlIG9iamVjdCIsIndlYnBhY2s6Ly9mcmVlZGF0YXMyaHRtbC8uL3NyYy9maXJzdEV4YW1wbGUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyogQGxpY2Vuc2VcblBhcGEgUGFyc2VcbnY1LjMuMVxuaHR0cHM6Ly9naXRodWIuY29tL21ob2x0L1BhcGFQYXJzZVxuTGljZW5zZTogTUlUXG4qL1xuIWZ1bmN0aW9uKGUsdCl7XCJmdW5jdGlvblwiPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kP2RlZmluZShbXSx0KTpcIm9iamVjdFwiPT10eXBlb2YgbW9kdWxlJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgZXhwb3J0cz9tb2R1bGUuZXhwb3J0cz10KCk6ZS5QYXBhPXQoKX0odGhpcyxmdW5jdGlvbiBzKCl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGY9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHNlbGY/c2VsZjpcInVuZGVmaW5lZFwiIT10eXBlb2Ygd2luZG93P3dpbmRvdzp2b2lkIDAhPT1mP2Y6e307dmFyIG49IWYuZG9jdW1lbnQmJiEhZi5wb3N0TWVzc2FnZSxvPW4mJi9ibG9iOi9pLnRlc3QoKGYubG9jYXRpb258fHt9KS5wcm90b2NvbCksYT17fSxoPTAsYj17cGFyc2U6ZnVuY3Rpb24oZSx0KXt2YXIgaT0odD10fHx7fSkuZHluYW1pY1R5cGluZ3x8ITE7TShpKSYmKHQuZHluYW1pY1R5cGluZ0Z1bmN0aW9uPWksaT17fSk7aWYodC5keW5hbWljVHlwaW5nPWksdC50cmFuc2Zvcm09ISFNKHQudHJhbnNmb3JtKSYmdC50cmFuc2Zvcm0sdC53b3JrZXImJmIuV09SS0VSU19TVVBQT1JURUQpe3ZhciByPWZ1bmN0aW9uKCl7aWYoIWIuV09SS0VSU19TVVBQT1JURUQpcmV0dXJuITE7dmFyIGU9KGk9Zi5VUkx8fGYud2Via2l0VVJMfHxudWxsLHI9cy50b1N0cmluZygpLGIuQkxPQl9VUkx8fChiLkJMT0JfVVJMPWkuY3JlYXRlT2JqZWN0VVJMKG5ldyBCbG9iKFtcIihcIixyLFwiKSgpO1wiXSx7dHlwZTpcInRleHQvamF2YXNjcmlwdFwifSkpKSksdD1uZXcgZi5Xb3JrZXIoZSk7dmFyIGkscjtyZXR1cm4gdC5vbm1lc3NhZ2U9Xyx0LmlkPWgrKyxhW3QuaWRdPXR9KCk7cmV0dXJuIHIudXNlclN0ZXA9dC5zdGVwLHIudXNlckNodW5rPXQuY2h1bmssci51c2VyQ29tcGxldGU9dC5jb21wbGV0ZSxyLnVzZXJFcnJvcj10LmVycm9yLHQuc3RlcD1NKHQuc3RlcCksdC5jaHVuaz1NKHQuY2h1bmspLHQuY29tcGxldGU9TSh0LmNvbXBsZXRlKSx0LmVycm9yPU0odC5lcnJvciksZGVsZXRlIHQud29ya2VyLHZvaWQgci5wb3N0TWVzc2FnZSh7aW5wdXQ6ZSxjb25maWc6dCx3b3JrZXJJZDpyLmlkfSl9dmFyIG49bnVsbDtiLk5PREVfU1RSRUFNX0lOUFVULFwic3RyaW5nXCI9PXR5cGVvZiBlP249dC5kb3dubG9hZD9uZXcgbCh0KTpuZXcgcCh0KTohMD09PWUucmVhZGFibGUmJk0oZS5yZWFkKSYmTShlLm9uKT9uPW5ldyBnKHQpOihmLkZpbGUmJmUgaW5zdGFuY2VvZiBGaWxlfHxlIGluc3RhbmNlb2YgT2JqZWN0KSYmKG49bmV3IGModCkpO3JldHVybiBuLnN0cmVhbShlKX0sdW5wYXJzZTpmdW5jdGlvbihlLHQpe3ZhciBuPSExLF89ITAsbT1cIixcIix5PVwiXFxyXFxuXCIscz0nXCInLGE9cytzLGk9ITEscj1udWxsLG89ITE7IWZ1bmN0aW9uKCl7aWYoXCJvYmplY3RcIiE9dHlwZW9mIHQpcmV0dXJuO1wic3RyaW5nXCIhPXR5cGVvZiB0LmRlbGltaXRlcnx8Yi5CQURfREVMSU1JVEVSUy5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuLTEhPT10LmRlbGltaXRlci5pbmRleE9mKGUpfSkubGVuZ3RofHwobT10LmRlbGltaXRlcik7KFwiYm9vbGVhblwiPT10eXBlb2YgdC5xdW90ZXN8fFwiZnVuY3Rpb25cIj09dHlwZW9mIHQucXVvdGVzfHxBcnJheS5pc0FycmF5KHQucXVvdGVzKSkmJihuPXQucXVvdGVzKTtcImJvb2xlYW5cIiE9dHlwZW9mIHQuc2tpcEVtcHR5TGluZXMmJlwic3RyaW5nXCIhPXR5cGVvZiB0LnNraXBFbXB0eUxpbmVzfHwoaT10LnNraXBFbXB0eUxpbmVzKTtcInN0cmluZ1wiPT10eXBlb2YgdC5uZXdsaW5lJiYoeT10Lm5ld2xpbmUpO1wic3RyaW5nXCI9PXR5cGVvZiB0LnF1b3RlQ2hhciYmKHM9dC5xdW90ZUNoYXIpO1wiYm9vbGVhblwiPT10eXBlb2YgdC5oZWFkZXImJihfPXQuaGVhZGVyKTtpZihBcnJheS5pc0FycmF5KHQuY29sdW1ucykpe2lmKDA9PT10LmNvbHVtbnMubGVuZ3RoKXRocm93IG5ldyBFcnJvcihcIk9wdGlvbiBjb2x1bW5zIGlzIGVtcHR5XCIpO3I9dC5jb2x1bW5zfXZvaWQgMCE9PXQuZXNjYXBlQ2hhciYmKGE9dC5lc2NhcGVDaGFyK3MpO1wiYm9vbGVhblwiPT10eXBlb2YgdC5lc2NhcGVGb3JtdWxhZSYmKG89dC5lc2NhcGVGb3JtdWxhZSl9KCk7dmFyIGg9bmV3IFJlZ0V4cChqKHMpLFwiZ1wiKTtcInN0cmluZ1wiPT10eXBlb2YgZSYmKGU9SlNPTi5wYXJzZShlKSk7aWYoQXJyYXkuaXNBcnJheShlKSl7aWYoIWUubGVuZ3RofHxBcnJheS5pc0FycmF5KGVbMF0pKXJldHVybiB1KG51bGwsZSxpKTtpZihcIm9iamVjdFwiPT10eXBlb2YgZVswXSlyZXR1cm4gdShyfHxPYmplY3Qua2V5cyhlWzBdKSxlLGkpfWVsc2UgaWYoXCJvYmplY3RcIj09dHlwZW9mIGUpcmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIGUuZGF0YSYmKGUuZGF0YT1KU09OLnBhcnNlKGUuZGF0YSkpLEFycmF5LmlzQXJyYXkoZS5kYXRhKSYmKGUuZmllbGRzfHwoZS5maWVsZHM9ZS5tZXRhJiZlLm1ldGEuZmllbGRzKSxlLmZpZWxkc3x8KGUuZmllbGRzPUFycmF5LmlzQXJyYXkoZS5kYXRhWzBdKT9lLmZpZWxkczpcIm9iamVjdFwiPT10eXBlb2YgZS5kYXRhWzBdP09iamVjdC5rZXlzKGUuZGF0YVswXSk6W10pLEFycmF5LmlzQXJyYXkoZS5kYXRhWzBdKXx8XCJvYmplY3RcIj09dHlwZW9mIGUuZGF0YVswXXx8KGUuZGF0YT1bZS5kYXRhXSkpLHUoZS5maWVsZHN8fFtdLGUuZGF0YXx8W10saSk7dGhyb3cgbmV3IEVycm9yKFwiVW5hYmxlIHRvIHNlcmlhbGl6ZSB1bnJlY29nbml6ZWQgaW5wdXRcIik7ZnVuY3Rpb24gdShlLHQsaSl7dmFyIHI9XCJcIjtcInN0cmluZ1wiPT10eXBlb2YgZSYmKGU9SlNPTi5wYXJzZShlKSksXCJzdHJpbmdcIj09dHlwZW9mIHQmJih0PUpTT04ucGFyc2UodCkpO3ZhciBuPUFycmF5LmlzQXJyYXkoZSkmJjA8ZS5sZW5ndGgscz0hQXJyYXkuaXNBcnJheSh0WzBdKTtpZihuJiZfKXtmb3IodmFyIGE9MDthPGUubGVuZ3RoO2ErKykwPGEmJihyKz1tKSxyKz12KGVbYV0sYSk7MDx0Lmxlbmd0aCYmKHIrPXkpfWZvcih2YXIgbz0wO288dC5sZW5ndGg7bysrKXt2YXIgaD1uP2UubGVuZ3RoOnRbb10ubGVuZ3RoLHU9ITEsZj1uPzA9PT1PYmplY3Qua2V5cyh0W29dKS5sZW5ndGg6MD09PXRbb10ubGVuZ3RoO2lmKGkmJiFuJiYodT1cImdyZWVkeVwiPT09aT9cIlwiPT09dFtvXS5qb2luKFwiXCIpLnRyaW0oKToxPT09dFtvXS5sZW5ndGgmJjA9PT10W29dWzBdLmxlbmd0aCksXCJncmVlZHlcIj09PWkmJm4pe2Zvcih2YXIgZD1bXSxsPTA7bDxoO2wrKyl7dmFyIGM9cz9lW2xdOmw7ZC5wdXNoKHRbb11bY10pfXU9XCJcIj09PWQuam9pbihcIlwiKS50cmltKCl9aWYoIXUpe2Zvcih2YXIgcD0wO3A8aDtwKyspezA8cCYmIWYmJihyKz1tKTt2YXIgZz1uJiZzP2VbcF06cDtyKz12KHRbb11bZ10scCl9bzx0Lmxlbmd0aC0xJiYoIWl8fDA8aCYmIWYpJiYocis9eSl9fXJldHVybiByfWZ1bmN0aW9uIHYoZSx0KXtpZihudWxsPT1lKXJldHVyblwiXCI7aWYoZS5jb25zdHJ1Y3Rvcj09PURhdGUpcmV0dXJuIEpTT04uc3RyaW5naWZ5KGUpLnNsaWNlKDEsMjUpOyEwPT09byYmXCJzdHJpbmdcIj09dHlwZW9mIGUmJm51bGwhPT1lLm1hdGNoKC9eWz0rXFwtQF0uKiQvKSYmKGU9XCInXCIrZSk7dmFyIGk9ZS50b1N0cmluZygpLnJlcGxhY2UoaCxhKSxyPVwiYm9vbGVhblwiPT10eXBlb2YgbiYmbnx8XCJmdW5jdGlvblwiPT10eXBlb2YgbiYmbihlLHQpfHxBcnJheS5pc0FycmF5KG4pJiZuW3RdfHxmdW5jdGlvbihlLHQpe2Zvcih2YXIgaT0wO2k8dC5sZW5ndGg7aSsrKWlmKC0xPGUuaW5kZXhPZih0W2ldKSlyZXR1cm4hMDtyZXR1cm4hMX0oaSxiLkJBRF9ERUxJTUlURVJTKXx8LTE8aS5pbmRleE9mKG0pfHxcIiBcIj09PWkuY2hhckF0KDApfHxcIiBcIj09PWkuY2hhckF0KGkubGVuZ3RoLTEpO3JldHVybiByP3MraStzOml9fX07aWYoYi5SRUNPUkRfU0VQPVN0cmluZy5mcm9tQ2hhckNvZGUoMzApLGIuVU5JVF9TRVA9U3RyaW5nLmZyb21DaGFyQ29kZSgzMSksYi5CWVRFX09SREVSX01BUks9XCJcXHVmZWZmXCIsYi5CQURfREVMSU1JVEVSUz1bXCJcXHJcIixcIlxcblwiLCdcIicsYi5CWVRFX09SREVSX01BUktdLGIuV09SS0VSU19TVVBQT1JURUQ9IW4mJiEhZi5Xb3JrZXIsYi5OT0RFX1NUUkVBTV9JTlBVVD0xLGIuTG9jYWxDaHVua1NpemU9MTA0ODU3NjAsYi5SZW1vdGVDaHVua1NpemU9NTI0Mjg4MCxiLkRlZmF1bHREZWxpbWl0ZXI9XCIsXCIsYi5QYXJzZXI9RSxiLlBhcnNlckhhbmRsZT1pLGIuTmV0d29ya1N0cmVhbWVyPWwsYi5GaWxlU3RyZWFtZXI9YyxiLlN0cmluZ1N0cmVhbWVyPXAsYi5SZWFkYWJsZVN0cmVhbVN0cmVhbWVyPWcsZi5qUXVlcnkpe3ZhciBkPWYualF1ZXJ5O2QuZm4ucGFyc2U9ZnVuY3Rpb24obyl7dmFyIGk9by5jb25maWd8fHt9LGg9W107cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihlKXtpZighKFwiSU5QVVRcIj09PWQodGhpcykucHJvcChcInRhZ05hbWVcIikudG9VcHBlckNhc2UoKSYmXCJmaWxlXCI9PT1kKHRoaXMpLmF0dHIoXCJ0eXBlXCIpLnRvTG93ZXJDYXNlKCkmJmYuRmlsZVJlYWRlcil8fCF0aGlzLmZpbGVzfHwwPT09dGhpcy5maWxlcy5sZW5ndGgpcmV0dXJuITA7Zm9yKHZhciB0PTA7dDx0aGlzLmZpbGVzLmxlbmd0aDt0KyspaC5wdXNoKHtmaWxlOnRoaXMuZmlsZXNbdF0saW5wdXRFbGVtOnRoaXMsaW5zdGFuY2VDb25maWc6ZC5leHRlbmQoe30saSl9KX0pLGUoKSx0aGlzO2Z1bmN0aW9uIGUoKXtpZigwIT09aC5sZW5ndGgpe3ZhciBlLHQsaSxyLG49aFswXTtpZihNKG8uYmVmb3JlKSl7dmFyIHM9by5iZWZvcmUobi5maWxlLG4uaW5wdXRFbGVtKTtpZihcIm9iamVjdFwiPT10eXBlb2Ygcyl7aWYoXCJhYm9ydFwiPT09cy5hY3Rpb24pcmV0dXJuIGU9XCJBYm9ydEVycm9yXCIsdD1uLmZpbGUsaT1uLmlucHV0RWxlbSxyPXMucmVhc29uLHZvaWQoTShvLmVycm9yKSYmby5lcnJvcih7bmFtZTplfSx0LGkscikpO2lmKFwic2tpcFwiPT09cy5hY3Rpb24pcmV0dXJuIHZvaWQgdSgpO1wib2JqZWN0XCI9PXR5cGVvZiBzLmNvbmZpZyYmKG4uaW5zdGFuY2VDb25maWc9ZC5leHRlbmQobi5pbnN0YW5jZUNvbmZpZyxzLmNvbmZpZykpfWVsc2UgaWYoXCJza2lwXCI9PT1zKXJldHVybiB2b2lkIHUoKX12YXIgYT1uLmluc3RhbmNlQ29uZmlnLmNvbXBsZXRlO24uaW5zdGFuY2VDb25maWcuY29tcGxldGU9ZnVuY3Rpb24oZSl7TShhKSYmYShlLG4uZmlsZSxuLmlucHV0RWxlbSksdSgpfSxiLnBhcnNlKG4uZmlsZSxuLmluc3RhbmNlQ29uZmlnKX1lbHNlIE0oby5jb21wbGV0ZSkmJm8uY29tcGxldGUoKX1mdW5jdGlvbiB1KCl7aC5zcGxpY2UoMCwxKSxlKCl9fX1mdW5jdGlvbiB1KGUpe3RoaXMuX2hhbmRsZT1udWxsLHRoaXMuX2ZpbmlzaGVkPSExLHRoaXMuX2NvbXBsZXRlZD0hMSx0aGlzLl9oYWx0ZWQ9ITEsdGhpcy5faW5wdXQ9bnVsbCx0aGlzLl9iYXNlSW5kZXg9MCx0aGlzLl9wYXJ0aWFsTGluZT1cIlwiLHRoaXMuX3Jvd0NvdW50PTAsdGhpcy5fc3RhcnQ9MCx0aGlzLl9uZXh0Q2h1bms9bnVsbCx0aGlzLmlzRmlyc3RDaHVuaz0hMCx0aGlzLl9jb21wbGV0ZVJlc3VsdHM9e2RhdGE6W10sZXJyb3JzOltdLG1ldGE6e319LGZ1bmN0aW9uKGUpe3ZhciB0PXcoZSk7dC5jaHVua1NpemU9cGFyc2VJbnQodC5jaHVua1NpemUpLGUuc3RlcHx8ZS5jaHVua3x8KHQuY2h1bmtTaXplPW51bGwpO3RoaXMuX2hhbmRsZT1uZXcgaSh0KSwodGhpcy5faGFuZGxlLnN0cmVhbWVyPXRoaXMpLl9jb25maWc9dH0uY2FsbCh0aGlzLGUpLHRoaXMucGFyc2VDaHVuaz1mdW5jdGlvbihlLHQpe2lmKHRoaXMuaXNGaXJzdENodW5rJiZNKHRoaXMuX2NvbmZpZy5iZWZvcmVGaXJzdENodW5rKSl7dmFyIGk9dGhpcy5fY29uZmlnLmJlZm9yZUZpcnN0Q2h1bmsoZSk7dm9pZCAwIT09aSYmKGU9aSl9dGhpcy5pc0ZpcnN0Q2h1bms9ITEsdGhpcy5faGFsdGVkPSExO3ZhciByPXRoaXMuX3BhcnRpYWxMaW5lK2U7dGhpcy5fcGFydGlhbExpbmU9XCJcIjt2YXIgbj10aGlzLl9oYW5kbGUucGFyc2Uocix0aGlzLl9iYXNlSW5kZXgsIXRoaXMuX2ZpbmlzaGVkKTtpZighdGhpcy5faGFuZGxlLnBhdXNlZCgpJiYhdGhpcy5faGFuZGxlLmFib3J0ZWQoKSl7dmFyIHM9bi5tZXRhLmN1cnNvcjt0aGlzLl9maW5pc2hlZHx8KHRoaXMuX3BhcnRpYWxMaW5lPXIuc3Vic3RyaW5nKHMtdGhpcy5fYmFzZUluZGV4KSx0aGlzLl9iYXNlSW5kZXg9cyksbiYmbi5kYXRhJiYodGhpcy5fcm93Q291bnQrPW4uZGF0YS5sZW5ndGgpO3ZhciBhPXRoaXMuX2ZpbmlzaGVkfHx0aGlzLl9jb25maWcucHJldmlldyYmdGhpcy5fcm93Q291bnQ+PXRoaXMuX2NvbmZpZy5wcmV2aWV3O2lmKG8pZi5wb3N0TWVzc2FnZSh7cmVzdWx0czpuLHdvcmtlcklkOmIuV09SS0VSX0lELGZpbmlzaGVkOmF9KTtlbHNlIGlmKE0odGhpcy5fY29uZmlnLmNodW5rKSYmIXQpe2lmKHRoaXMuX2NvbmZpZy5jaHVuayhuLHRoaXMuX2hhbmRsZSksdGhpcy5faGFuZGxlLnBhdXNlZCgpfHx0aGlzLl9oYW5kbGUuYWJvcnRlZCgpKXJldHVybiB2b2lkKHRoaXMuX2hhbHRlZD0hMCk7bj12b2lkIDAsdGhpcy5fY29tcGxldGVSZXN1bHRzPXZvaWQgMH1yZXR1cm4gdGhpcy5fY29uZmlnLnN0ZXB8fHRoaXMuX2NvbmZpZy5jaHVua3x8KHRoaXMuX2NvbXBsZXRlUmVzdWx0cy5kYXRhPXRoaXMuX2NvbXBsZXRlUmVzdWx0cy5kYXRhLmNvbmNhdChuLmRhdGEpLHRoaXMuX2NvbXBsZXRlUmVzdWx0cy5lcnJvcnM9dGhpcy5fY29tcGxldGVSZXN1bHRzLmVycm9ycy5jb25jYXQobi5lcnJvcnMpLHRoaXMuX2NvbXBsZXRlUmVzdWx0cy5tZXRhPW4ubWV0YSksdGhpcy5fY29tcGxldGVkfHwhYXx8IU0odGhpcy5fY29uZmlnLmNvbXBsZXRlKXx8biYmbi5tZXRhLmFib3J0ZWR8fCh0aGlzLl9jb25maWcuY29tcGxldGUodGhpcy5fY29tcGxldGVSZXN1bHRzLHRoaXMuX2lucHV0KSx0aGlzLl9jb21wbGV0ZWQ9ITApLGF8fG4mJm4ubWV0YS5wYXVzZWR8fHRoaXMuX25leHRDaHVuaygpLG59dGhpcy5faGFsdGVkPSEwfSx0aGlzLl9zZW5kRXJyb3I9ZnVuY3Rpb24oZSl7TSh0aGlzLl9jb25maWcuZXJyb3IpP3RoaXMuX2NvbmZpZy5lcnJvcihlKTpvJiZ0aGlzLl9jb25maWcuZXJyb3ImJmYucG9zdE1lc3NhZ2Uoe3dvcmtlcklkOmIuV09SS0VSX0lELGVycm9yOmUsZmluaXNoZWQ6ITF9KX19ZnVuY3Rpb24gbChlKXt2YXIgcjsoZT1lfHx7fSkuY2h1bmtTaXplfHwoZS5jaHVua1NpemU9Yi5SZW1vdGVDaHVua1NpemUpLHUuY2FsbCh0aGlzLGUpLHRoaXMuX25leHRDaHVuaz1uP2Z1bmN0aW9uKCl7dGhpcy5fcmVhZENodW5rKCksdGhpcy5fY2h1bmtMb2FkZWQoKX06ZnVuY3Rpb24oKXt0aGlzLl9yZWFkQ2h1bmsoKX0sdGhpcy5zdHJlYW09ZnVuY3Rpb24oZSl7dGhpcy5faW5wdXQ9ZSx0aGlzLl9uZXh0Q2h1bmsoKX0sdGhpcy5fcmVhZENodW5rPWZ1bmN0aW9uKCl7aWYodGhpcy5fZmluaXNoZWQpdGhpcy5fY2h1bmtMb2FkZWQoKTtlbHNle2lmKHI9bmV3IFhNTEh0dHBSZXF1ZXN0LHRoaXMuX2NvbmZpZy53aXRoQ3JlZGVudGlhbHMmJihyLndpdGhDcmVkZW50aWFscz10aGlzLl9jb25maWcud2l0aENyZWRlbnRpYWxzKSxufHwoci5vbmxvYWQ9dih0aGlzLl9jaHVua0xvYWRlZCx0aGlzKSxyLm9uZXJyb3I9dih0aGlzLl9jaHVua0Vycm9yLHRoaXMpKSxyLm9wZW4odGhpcy5fY29uZmlnLmRvd25sb2FkUmVxdWVzdEJvZHk/XCJQT1NUXCI6XCJHRVRcIix0aGlzLl9pbnB1dCwhbiksdGhpcy5fY29uZmlnLmRvd25sb2FkUmVxdWVzdEhlYWRlcnMpe3ZhciBlPXRoaXMuX2NvbmZpZy5kb3dubG9hZFJlcXVlc3RIZWFkZXJzO2Zvcih2YXIgdCBpbiBlKXIuc2V0UmVxdWVzdEhlYWRlcih0LGVbdF0pfWlmKHRoaXMuX2NvbmZpZy5jaHVua1NpemUpe3ZhciBpPXRoaXMuX3N0YXJ0K3RoaXMuX2NvbmZpZy5jaHVua1NpemUtMTtyLnNldFJlcXVlc3RIZWFkZXIoXCJSYW5nZVwiLFwiYnl0ZXM9XCIrdGhpcy5fc3RhcnQrXCItXCIraSl9dHJ5e3Iuc2VuZCh0aGlzLl9jb25maWcuZG93bmxvYWRSZXF1ZXN0Qm9keSl9Y2F0Y2goZSl7dGhpcy5fY2h1bmtFcnJvcihlLm1lc3NhZ2UpfW4mJjA9PT1yLnN0YXR1cyYmdGhpcy5fY2h1bmtFcnJvcigpfX0sdGhpcy5fY2h1bmtMb2FkZWQ9ZnVuY3Rpb24oKXs0PT09ci5yZWFkeVN0YXRlJiYoci5zdGF0dXM8MjAwfHw0MDA8PXIuc3RhdHVzP3RoaXMuX2NodW5rRXJyb3IoKToodGhpcy5fc3RhcnQrPXRoaXMuX2NvbmZpZy5jaHVua1NpemU/dGhpcy5fY29uZmlnLmNodW5rU2l6ZTpyLnJlc3BvbnNlVGV4dC5sZW5ndGgsdGhpcy5fZmluaXNoZWQ9IXRoaXMuX2NvbmZpZy5jaHVua1NpemV8fHRoaXMuX3N0YXJ0Pj1mdW5jdGlvbihlKXt2YXIgdD1lLmdldFJlc3BvbnNlSGVhZGVyKFwiQ29udGVudC1SYW5nZVwiKTtpZihudWxsPT09dClyZXR1cm4tMTtyZXR1cm4gcGFyc2VJbnQodC5zdWJzdHJpbmcodC5sYXN0SW5kZXhPZihcIi9cIikrMSkpfShyKSx0aGlzLnBhcnNlQ2h1bmsoci5yZXNwb25zZVRleHQpKSl9LHRoaXMuX2NodW5rRXJyb3I9ZnVuY3Rpb24oZSl7dmFyIHQ9ci5zdGF0dXNUZXh0fHxlO3RoaXMuX3NlbmRFcnJvcihuZXcgRXJyb3IodCkpfX1mdW5jdGlvbiBjKGUpe3ZhciByLG47KGU9ZXx8e30pLmNodW5rU2l6ZXx8KGUuY2h1bmtTaXplPWIuTG9jYWxDaHVua1NpemUpLHUuY2FsbCh0aGlzLGUpO3ZhciBzPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBGaWxlUmVhZGVyO3RoaXMuc3RyZWFtPWZ1bmN0aW9uKGUpe3RoaXMuX2lucHV0PWUsbj1lLnNsaWNlfHxlLndlYmtpdFNsaWNlfHxlLm1velNsaWNlLHM/KChyPW5ldyBGaWxlUmVhZGVyKS5vbmxvYWQ9dih0aGlzLl9jaHVua0xvYWRlZCx0aGlzKSxyLm9uZXJyb3I9dih0aGlzLl9jaHVua0Vycm9yLHRoaXMpKTpyPW5ldyBGaWxlUmVhZGVyU3luYyx0aGlzLl9uZXh0Q2h1bmsoKX0sdGhpcy5fbmV4dENodW5rPWZ1bmN0aW9uKCl7dGhpcy5fZmluaXNoZWR8fHRoaXMuX2NvbmZpZy5wcmV2aWV3JiYhKHRoaXMuX3Jvd0NvdW50PHRoaXMuX2NvbmZpZy5wcmV2aWV3KXx8dGhpcy5fcmVhZENodW5rKCl9LHRoaXMuX3JlYWRDaHVuaz1mdW5jdGlvbigpe3ZhciBlPXRoaXMuX2lucHV0O2lmKHRoaXMuX2NvbmZpZy5jaHVua1NpemUpe3ZhciB0PU1hdGgubWluKHRoaXMuX3N0YXJ0K3RoaXMuX2NvbmZpZy5jaHVua1NpemUsdGhpcy5faW5wdXQuc2l6ZSk7ZT1uLmNhbGwoZSx0aGlzLl9zdGFydCx0KX12YXIgaT1yLnJlYWRBc1RleHQoZSx0aGlzLl9jb25maWcuZW5jb2RpbmcpO3N8fHRoaXMuX2NodW5rTG9hZGVkKHt0YXJnZXQ6e3Jlc3VsdDppfX0pfSx0aGlzLl9jaHVua0xvYWRlZD1mdW5jdGlvbihlKXt0aGlzLl9zdGFydCs9dGhpcy5fY29uZmlnLmNodW5rU2l6ZSx0aGlzLl9maW5pc2hlZD0hdGhpcy5fY29uZmlnLmNodW5rU2l6ZXx8dGhpcy5fc3RhcnQ+PXRoaXMuX2lucHV0LnNpemUsdGhpcy5wYXJzZUNodW5rKGUudGFyZ2V0LnJlc3VsdCl9LHRoaXMuX2NodW5rRXJyb3I9ZnVuY3Rpb24oKXt0aGlzLl9zZW5kRXJyb3Ioci5lcnJvcil9fWZ1bmN0aW9uIHAoZSl7dmFyIGk7dS5jYWxsKHRoaXMsZT1lfHx7fSksdGhpcy5zdHJlYW09ZnVuY3Rpb24oZSl7cmV0dXJuIGk9ZSx0aGlzLl9uZXh0Q2h1bmsoKX0sdGhpcy5fbmV4dENodW5rPWZ1bmN0aW9uKCl7aWYoIXRoaXMuX2ZpbmlzaGVkKXt2YXIgZSx0PXRoaXMuX2NvbmZpZy5jaHVua1NpemU7cmV0dXJuIHQ/KGU9aS5zdWJzdHJpbmcoMCx0KSxpPWkuc3Vic3RyaW5nKHQpKTooZT1pLGk9XCJcIiksdGhpcy5fZmluaXNoZWQ9IWksdGhpcy5wYXJzZUNodW5rKGUpfX19ZnVuY3Rpb24gZyhlKXt1LmNhbGwodGhpcyxlPWV8fHt9KTt2YXIgdD1bXSxpPSEwLHI9ITE7dGhpcy5wYXVzZT1mdW5jdGlvbigpe3UucHJvdG90eXBlLnBhdXNlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSx0aGlzLl9pbnB1dC5wYXVzZSgpfSx0aGlzLnJlc3VtZT1mdW5jdGlvbigpe3UucHJvdG90eXBlLnJlc3VtZS5hcHBseSh0aGlzLGFyZ3VtZW50cyksdGhpcy5faW5wdXQucmVzdW1lKCl9LHRoaXMuc3RyZWFtPWZ1bmN0aW9uKGUpe3RoaXMuX2lucHV0PWUsdGhpcy5faW5wdXQub24oXCJkYXRhXCIsdGhpcy5fc3RyZWFtRGF0YSksdGhpcy5faW5wdXQub24oXCJlbmRcIix0aGlzLl9zdHJlYW1FbmQpLHRoaXMuX2lucHV0Lm9uKFwiZXJyb3JcIix0aGlzLl9zdHJlYW1FcnJvcil9LHRoaXMuX2NoZWNrSXNGaW5pc2hlZD1mdW5jdGlvbigpe3ImJjE9PT10Lmxlbmd0aCYmKHRoaXMuX2ZpbmlzaGVkPSEwKX0sdGhpcy5fbmV4dENodW5rPWZ1bmN0aW9uKCl7dGhpcy5fY2hlY2tJc0ZpbmlzaGVkKCksdC5sZW5ndGg/dGhpcy5wYXJzZUNodW5rKHQuc2hpZnQoKSk6aT0hMH0sdGhpcy5fc3RyZWFtRGF0YT12KGZ1bmN0aW9uKGUpe3RyeXt0LnB1c2goXCJzdHJpbmdcIj09dHlwZW9mIGU/ZTplLnRvU3RyaW5nKHRoaXMuX2NvbmZpZy5lbmNvZGluZykpLGkmJihpPSExLHRoaXMuX2NoZWNrSXNGaW5pc2hlZCgpLHRoaXMucGFyc2VDaHVuayh0LnNoaWZ0KCkpKX1jYXRjaChlKXt0aGlzLl9zdHJlYW1FcnJvcihlKX19LHRoaXMpLHRoaXMuX3N0cmVhbUVycm9yPXYoZnVuY3Rpb24oZSl7dGhpcy5fc3RyZWFtQ2xlYW5VcCgpLHRoaXMuX3NlbmRFcnJvcihlKX0sdGhpcyksdGhpcy5fc3RyZWFtRW5kPXYoZnVuY3Rpb24oKXt0aGlzLl9zdHJlYW1DbGVhblVwKCkscj0hMCx0aGlzLl9zdHJlYW1EYXRhKFwiXCIpfSx0aGlzKSx0aGlzLl9zdHJlYW1DbGVhblVwPXYoZnVuY3Rpb24oKXt0aGlzLl9pbnB1dC5yZW1vdmVMaXN0ZW5lcihcImRhdGFcIix0aGlzLl9zdHJlYW1EYXRhKSx0aGlzLl9pbnB1dC5yZW1vdmVMaXN0ZW5lcihcImVuZFwiLHRoaXMuX3N0cmVhbUVuZCksdGhpcy5faW5wdXQucmVtb3ZlTGlzdGVuZXIoXCJlcnJvclwiLHRoaXMuX3N0cmVhbUVycm9yKX0sdGhpcyl9ZnVuY3Rpb24gaShtKXt2YXIgYSxvLGgscj1NYXRoLnBvdygyLDUzKSxuPS1yLHM9L15cXHMqLT8oXFxkK1xcLj98XFwuXFxkK3xcXGQrXFwuXFxkKykoW2VFXVstK10/XFxkKyk/XFxzKiQvLHU9L14oXFxkezR9LVswMV1cXGQtWzAtM11cXGRUWzAtMl1cXGQ6WzAtNV1cXGQ6WzAtNV1cXGRcXC5cXGQrKFsrLV1bMC0yXVxcZDpbMC01XVxcZHxaKSl8KFxcZHs0fS1bMDFdXFxkLVswLTNdXFxkVFswLTJdXFxkOlswLTVdXFxkOlswLTVdXFxkKFsrLV1bMC0yXVxcZDpbMC01XVxcZHxaKSl8KFxcZHs0fS1bMDFdXFxkLVswLTNdXFxkVFswLTJdXFxkOlswLTVdXFxkKFsrLV1bMC0yXVxcZDpbMC01XVxcZHxaKSkkLyx0PXRoaXMsaT0wLGY9MCxkPSExLGU9ITEsbD1bXSxjPXtkYXRhOltdLGVycm9yczpbXSxtZXRhOnt9fTtpZihNKG0uc3RlcCkpe3ZhciBwPW0uc3RlcDttLnN0ZXA9ZnVuY3Rpb24oZSl7aWYoYz1lLF8oKSlnKCk7ZWxzZXtpZihnKCksMD09PWMuZGF0YS5sZW5ndGgpcmV0dXJuO2krPWUuZGF0YS5sZW5ndGgsbS5wcmV2aWV3JiZpPm0ucHJldmlldz9vLmFib3J0KCk6KGMuZGF0YT1jLmRhdGFbMF0scChjLHQpKX19fWZ1bmN0aW9uIHkoZSl7cmV0dXJuXCJncmVlZHlcIj09PW0uc2tpcEVtcHR5TGluZXM/XCJcIj09PWUuam9pbihcIlwiKS50cmltKCk6MT09PWUubGVuZ3RoJiYwPT09ZVswXS5sZW5ndGh9ZnVuY3Rpb24gZygpe2lmKGMmJmgmJihrKFwiRGVsaW1pdGVyXCIsXCJVbmRldGVjdGFibGVEZWxpbWl0ZXJcIixcIlVuYWJsZSB0byBhdXRvLWRldGVjdCBkZWxpbWl0aW5nIGNoYXJhY3RlcjsgZGVmYXVsdGVkIHRvICdcIitiLkRlZmF1bHREZWxpbWl0ZXIrXCInXCIpLGg9ITEpLG0uc2tpcEVtcHR5TGluZXMpZm9yKHZhciBlPTA7ZTxjLmRhdGEubGVuZ3RoO2UrKyl5KGMuZGF0YVtlXSkmJmMuZGF0YS5zcGxpY2UoZS0tLDEpO3JldHVybiBfKCkmJmZ1bmN0aW9uKCl7aWYoIWMpcmV0dXJuO2Z1bmN0aW9uIGUoZSx0KXtNKG0udHJhbnNmb3JtSGVhZGVyKSYmKGU9bS50cmFuc2Zvcm1IZWFkZXIoZSx0KSksbC5wdXNoKGUpfWlmKEFycmF5LmlzQXJyYXkoYy5kYXRhWzBdKSl7Zm9yKHZhciB0PTA7XygpJiZ0PGMuZGF0YS5sZW5ndGg7dCsrKWMuZGF0YVt0XS5mb3JFYWNoKGUpO2MuZGF0YS5zcGxpY2UoMCwxKX1lbHNlIGMuZGF0YS5mb3JFYWNoKGUpfSgpLGZ1bmN0aW9uKCl7aWYoIWN8fCFtLmhlYWRlciYmIW0uZHluYW1pY1R5cGluZyYmIW0udHJhbnNmb3JtKXJldHVybiBjO2Z1bmN0aW9uIGUoZSx0KXt2YXIgaSxyPW0uaGVhZGVyP3t9OltdO2ZvcihpPTA7aTxlLmxlbmd0aDtpKyspe3ZhciBuPWkscz1lW2ldO20uaGVhZGVyJiYobj1pPj1sLmxlbmd0aD9cIl9fcGFyc2VkX2V4dHJhXCI6bFtpXSksbS50cmFuc2Zvcm0mJihzPW0udHJhbnNmb3JtKHMsbikpLHM9dihuLHMpLFwiX19wYXJzZWRfZXh0cmFcIj09PW4/KHJbbl09cltuXXx8W10scltuXS5wdXNoKHMpKTpyW25dPXN9cmV0dXJuIG0uaGVhZGVyJiYoaT5sLmxlbmd0aD9rKFwiRmllbGRNaXNtYXRjaFwiLFwiVG9vTWFueUZpZWxkc1wiLFwiVG9vIG1hbnkgZmllbGRzOiBleHBlY3RlZCBcIitsLmxlbmd0aCtcIiBmaWVsZHMgYnV0IHBhcnNlZCBcIitpLGYrdCk6aTxsLmxlbmd0aCYmayhcIkZpZWxkTWlzbWF0Y2hcIixcIlRvb0Zld0ZpZWxkc1wiLFwiVG9vIGZldyBmaWVsZHM6IGV4cGVjdGVkIFwiK2wubGVuZ3RoK1wiIGZpZWxkcyBidXQgcGFyc2VkIFwiK2ksZit0KSkscn12YXIgdD0xOyFjLmRhdGEubGVuZ3RofHxBcnJheS5pc0FycmF5KGMuZGF0YVswXSk/KGMuZGF0YT1jLmRhdGEubWFwKGUpLHQ9Yy5kYXRhLmxlbmd0aCk6Yy5kYXRhPWUoYy5kYXRhLDApO20uaGVhZGVyJiZjLm1ldGEmJihjLm1ldGEuZmllbGRzPWwpO3JldHVybiBmKz10LGN9KCl9ZnVuY3Rpb24gXygpe3JldHVybiBtLmhlYWRlciYmMD09PWwubGVuZ3RofWZ1bmN0aW9uIHYoZSx0KXtyZXR1cm4gaT1lLG0uZHluYW1pY1R5cGluZ0Z1bmN0aW9uJiZ2b2lkIDA9PT1tLmR5bmFtaWNUeXBpbmdbaV0mJihtLmR5bmFtaWNUeXBpbmdbaV09bS5keW5hbWljVHlwaW5nRnVuY3Rpb24oaSkpLCEwPT09KG0uZHluYW1pY1R5cGluZ1tpXXx8bS5keW5hbWljVHlwaW5nKT9cInRydWVcIj09PXR8fFwiVFJVRVwiPT09dHx8XCJmYWxzZVwiIT09dCYmXCJGQUxTRVwiIT09dCYmKGZ1bmN0aW9uKGUpe2lmKHMudGVzdChlKSl7dmFyIHQ9cGFyc2VGbG9hdChlKTtpZihuPHQmJnQ8cilyZXR1cm4hMH1yZXR1cm4hMX0odCk/cGFyc2VGbG9hdCh0KTp1LnRlc3QodCk/bmV3IERhdGUodCk6XCJcIj09PXQ/bnVsbDp0KTp0O3ZhciBpfWZ1bmN0aW9uIGsoZSx0LGkscil7dmFyIG49e3R5cGU6ZSxjb2RlOnQsbWVzc2FnZTppfTt2b2lkIDAhPT1yJiYobi5yb3c9ciksYy5lcnJvcnMucHVzaChuKX10aGlzLnBhcnNlPWZ1bmN0aW9uKGUsdCxpKXt2YXIgcj1tLnF1b3RlQ2hhcnx8J1wiJztpZihtLm5ld2xpbmV8fChtLm5ld2xpbmU9ZnVuY3Rpb24oZSx0KXtlPWUuc3Vic3RyaW5nKDAsMTA0ODU3Nik7dmFyIGk9bmV3IFJlZ0V4cChqKHQpK1wiKFteXSo/KVwiK2oodCksXCJnbVwiKSxyPShlPWUucmVwbGFjZShpLFwiXCIpKS5zcGxpdChcIlxcclwiKSxuPWUuc3BsaXQoXCJcXG5cIikscz0xPG4ubGVuZ3RoJiZuWzBdLmxlbmd0aDxyWzBdLmxlbmd0aDtpZigxPT09ci5sZW5ndGh8fHMpcmV0dXJuXCJcXG5cIjtmb3IodmFyIGE9MCxvPTA7bzxyLmxlbmd0aDtvKyspXCJcXG5cIj09PXJbb11bMF0mJmErKztyZXR1cm4gYT49ci5sZW5ndGgvMj9cIlxcclxcblwiOlwiXFxyXCJ9KGUscikpLGg9ITEsbS5kZWxpbWl0ZXIpTShtLmRlbGltaXRlcikmJihtLmRlbGltaXRlcj1tLmRlbGltaXRlcihlKSxjLm1ldGEuZGVsaW1pdGVyPW0uZGVsaW1pdGVyKTtlbHNle3ZhciBuPWZ1bmN0aW9uKGUsdCxpLHIsbil7dmFyIHMsYSxvLGg7bj1ufHxbXCIsXCIsXCJcXHRcIixcInxcIixcIjtcIixiLlJFQ09SRF9TRVAsYi5VTklUX1NFUF07Zm9yKHZhciB1PTA7dTxuLmxlbmd0aDt1Kyspe3ZhciBmPW5bdV0sZD0wLGw9MCxjPTA7bz12b2lkIDA7Zm9yKHZhciBwPW5ldyBFKHtjb21tZW50czpyLGRlbGltaXRlcjpmLG5ld2xpbmU6dCxwcmV2aWV3OjEwfSkucGFyc2UoZSksZz0wO2c8cC5kYXRhLmxlbmd0aDtnKyspaWYoaSYmeShwLmRhdGFbZ10pKWMrKztlbHNle3ZhciBfPXAuZGF0YVtnXS5sZW5ndGg7bCs9Xyx2b2lkIDAhPT1vPzA8XyYmKGQrPU1hdGguYWJzKF8tbyksbz1fKTpvPV99MDxwLmRhdGEubGVuZ3RoJiYobC89cC5kYXRhLmxlbmd0aC1jKSwodm9pZCAwPT09YXx8ZDw9YSkmJih2b2lkIDA9PT1ofHxoPGwpJiYxLjk5PGwmJihhPWQscz1mLGg9bCl9cmV0dXJue3N1Y2Nlc3NmdWw6ISEobS5kZWxpbWl0ZXI9cyksYmVzdERlbGltaXRlcjpzfX0oZSxtLm5ld2xpbmUsbS5za2lwRW1wdHlMaW5lcyxtLmNvbW1lbnRzLG0uZGVsaW1pdGVyc1RvR3Vlc3MpO24uc3VjY2Vzc2Z1bD9tLmRlbGltaXRlcj1uLmJlc3REZWxpbWl0ZXI6KGg9ITAsbS5kZWxpbWl0ZXI9Yi5EZWZhdWx0RGVsaW1pdGVyKSxjLm1ldGEuZGVsaW1pdGVyPW0uZGVsaW1pdGVyfXZhciBzPXcobSk7cmV0dXJuIG0ucHJldmlldyYmbS5oZWFkZXImJnMucHJldmlldysrLGE9ZSxvPW5ldyBFKHMpLGM9by5wYXJzZShhLHQsaSksZygpLGQ/e21ldGE6e3BhdXNlZDohMH19OmN8fHttZXRhOntwYXVzZWQ6ITF9fX0sdGhpcy5wYXVzZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gZH0sdGhpcy5wYXVzZT1mdW5jdGlvbigpe2Q9ITAsby5hYm9ydCgpLGE9TShtLmNodW5rKT9cIlwiOmEuc3Vic3RyaW5nKG8uZ2V0Q2hhckluZGV4KCkpfSx0aGlzLnJlc3VtZT1mdW5jdGlvbigpe3Quc3RyZWFtZXIuX2hhbHRlZD8oZD0hMSx0LnN0cmVhbWVyLnBhcnNlQ2h1bmsoYSwhMCkpOnNldFRpbWVvdXQodC5yZXN1bWUsMyl9LHRoaXMuYWJvcnRlZD1mdW5jdGlvbigpe3JldHVybiBlfSx0aGlzLmFib3J0PWZ1bmN0aW9uKCl7ZT0hMCxvLmFib3J0KCksYy5tZXRhLmFib3J0ZWQ9ITAsTShtLmNvbXBsZXRlKSYmbS5jb21wbGV0ZShjKSxhPVwiXCJ9fWZ1bmN0aW9uIGooZSl7cmV0dXJuIGUucmVwbGFjZSgvWy4qKz9eJHt9KCl8W1xcXVxcXFxdL2csXCJcXFxcJCZcIil9ZnVuY3Rpb24gRShlKXt2YXIgUyxPPShlPWV8fHt9KS5kZWxpbWl0ZXIseD1lLm5ld2xpbmUsST1lLmNvbW1lbnRzLFQ9ZS5zdGVwLEQ9ZS5wcmV2aWV3LEE9ZS5mYXN0TW9kZSxMPVM9dm9pZCAwPT09ZS5xdW90ZUNoYXI/J1wiJzplLnF1b3RlQ2hhcjtpZih2b2lkIDAhPT1lLmVzY2FwZUNoYXImJihMPWUuZXNjYXBlQ2hhciksKFwic3RyaW5nXCIhPXR5cGVvZiBPfHwtMTxiLkJBRF9ERUxJTUlURVJTLmluZGV4T2YoTykpJiYoTz1cIixcIiksST09PU8pdGhyb3cgbmV3IEVycm9yKFwiQ29tbWVudCBjaGFyYWN0ZXIgc2FtZSBhcyBkZWxpbWl0ZXJcIik7ITA9PT1JP0k9XCIjXCI6KFwic3RyaW5nXCIhPXR5cGVvZiBJfHwtMTxiLkJBRF9ERUxJTUlURVJTLmluZGV4T2YoSSkpJiYoST0hMSksXCJcXG5cIiE9PXgmJlwiXFxyXCIhPT14JiZcIlxcclxcblwiIT09eCYmKHg9XCJcXG5cIik7dmFyIEY9MCx6PSExO3RoaXMucGFyc2U9ZnVuY3Rpb24ocix0LGkpe2lmKFwic3RyaW5nXCIhPXR5cGVvZiByKXRocm93IG5ldyBFcnJvcihcIklucHV0IG11c3QgYmUgYSBzdHJpbmdcIik7dmFyIG49ci5sZW5ndGgsZT1PLmxlbmd0aCxzPXgubGVuZ3RoLGE9SS5sZW5ndGgsbz1NKFQpLGg9W10sdT1bXSxmPVtdLGQ9Rj0wO2lmKCFyKXJldHVybiBDKCk7aWYoQXx8ITEhPT1BJiYtMT09PXIuaW5kZXhPZihTKSl7Zm9yKHZhciBsPXIuc3BsaXQoeCksYz0wO2M8bC5sZW5ndGg7YysrKXtpZihmPWxbY10sRis9Zi5sZW5ndGgsYyE9PWwubGVuZ3RoLTEpRis9eC5sZW5ndGg7ZWxzZSBpZihpKXJldHVybiBDKCk7aWYoIUl8fGYuc3Vic3RyaW5nKDAsYSkhPT1JKXtpZihvKXtpZihoPVtdLGsoZi5zcGxpdChPKSksUigpLHopcmV0dXJuIEMoKX1lbHNlIGsoZi5zcGxpdChPKSk7aWYoRCYmRDw9YylyZXR1cm4gaD1oLnNsaWNlKDAsRCksQyghMCl9fXJldHVybiBDKCl9Zm9yKHZhciBwPXIuaW5kZXhPZihPLEYpLGc9ci5pbmRleE9mKHgsRiksXz1uZXcgUmVnRXhwKGooTCkraihTKSxcImdcIiksbT1yLmluZGV4T2YoUyxGKTs7KWlmKHJbRl0hPT1TKWlmKEkmJjA9PT1mLmxlbmd0aCYmci5zdWJzdHJpbmcoRixGK2EpPT09SSl7aWYoLTE9PT1nKXJldHVybiBDKCk7Rj1nK3MsZz1yLmluZGV4T2YoeCxGKSxwPXIuaW5kZXhPZihPLEYpfWVsc2UgaWYoLTEhPT1wJiYocDxnfHwtMT09PWcpKWYucHVzaChyLnN1YnN0cmluZyhGLHApKSxGPXArZSxwPXIuaW5kZXhPZihPLEYpO2Vsc2V7aWYoLTE9PT1nKWJyZWFrO2lmKGYucHVzaChyLnN1YnN0cmluZyhGLGcpKSx3KGcrcyksbyYmKFIoKSx6KSlyZXR1cm4gQygpO2lmKEQmJmgubGVuZ3RoPj1EKXJldHVybiBDKCEwKX1lbHNlIGZvcihtPUYsRisrOzspe2lmKC0xPT09KG09ci5pbmRleE9mKFMsbSsxKSkpcmV0dXJuIGl8fHUucHVzaCh7dHlwZTpcIlF1b3Rlc1wiLGNvZGU6XCJNaXNzaW5nUXVvdGVzXCIsbWVzc2FnZTpcIlF1b3RlZCBmaWVsZCB1bnRlcm1pbmF0ZWRcIixyb3c6aC5sZW5ndGgsaW5kZXg6Rn0pLEUoKTtpZihtPT09bi0xKXJldHVybiBFKHIuc3Vic3RyaW5nKEYsbSkucmVwbGFjZShfLFMpKTtpZihTIT09THx8clttKzFdIT09TCl7aWYoUz09PUx8fDA9PT1tfHxyW20tMV0hPT1MKXstMSE9PXAmJnA8bSsxJiYocD1yLmluZGV4T2YoTyxtKzEpKSwtMSE9PWcmJmc8bSsxJiYoZz1yLmluZGV4T2YoeCxtKzEpKTt2YXIgeT1iKC0xPT09Zz9wOk1hdGgubWluKHAsZykpO2lmKHJbbSsxK3ldPT09Tyl7Zi5wdXNoKHIuc3Vic3RyaW5nKEYsbSkucmVwbGFjZShfLFMpKSxyW0Y9bSsxK3krZV0hPT1TJiYobT1yLmluZGV4T2YoUyxGKSkscD1yLmluZGV4T2YoTyxGKSxnPXIuaW5kZXhPZih4LEYpO2JyZWFrfXZhciB2PWIoZyk7aWYoci5zdWJzdHJpbmcobSsxK3YsbSsxK3Yrcyk9PT14KXtpZihmLnB1c2goci5zdWJzdHJpbmcoRixtKS5yZXBsYWNlKF8sUykpLHcobSsxK3YrcykscD1yLmluZGV4T2YoTyxGKSxtPXIuaW5kZXhPZihTLEYpLG8mJihSKCkseikpcmV0dXJuIEMoKTtpZihEJiZoLmxlbmd0aD49RClyZXR1cm4gQyghMCk7YnJlYWt9dS5wdXNoKHt0eXBlOlwiUXVvdGVzXCIsY29kZTpcIkludmFsaWRRdW90ZXNcIixtZXNzYWdlOlwiVHJhaWxpbmcgcXVvdGUgb24gcXVvdGVkIGZpZWxkIGlzIG1hbGZvcm1lZFwiLHJvdzpoLmxlbmd0aCxpbmRleDpGfSksbSsrfX1lbHNlIG0rK31yZXR1cm4gRSgpO2Z1bmN0aW9uIGsoZSl7aC5wdXNoKGUpLGQ9Rn1mdW5jdGlvbiBiKGUpe3ZhciB0PTA7aWYoLTEhPT1lKXt2YXIgaT1yLnN1YnN0cmluZyhtKzEsZSk7aSYmXCJcIj09PWkudHJpbSgpJiYodD1pLmxlbmd0aCl9cmV0dXJuIHR9ZnVuY3Rpb24gRShlKXtyZXR1cm4gaXx8KHZvaWQgMD09PWUmJihlPXIuc3Vic3RyaW5nKEYpKSxmLnB1c2goZSksRj1uLGsoZiksbyYmUigpKSxDKCl9ZnVuY3Rpb24gdyhlKXtGPWUsayhmKSxmPVtdLGc9ci5pbmRleE9mKHgsRil9ZnVuY3Rpb24gQyhlKXtyZXR1cm57ZGF0YTpoLGVycm9yczp1LG1ldGE6e2RlbGltaXRlcjpPLGxpbmVicmVhazp4LGFib3J0ZWQ6eix0cnVuY2F0ZWQ6ISFlLGN1cnNvcjpkKyh0fHwwKX19fWZ1bmN0aW9uIFIoKXtUKEMoKSksaD1bXSx1PVtdfX0sdGhpcy5hYm9ydD1mdW5jdGlvbigpe3o9ITB9LHRoaXMuZ2V0Q2hhckluZGV4PWZ1bmN0aW9uKCl7cmV0dXJuIEZ9fWZ1bmN0aW9uIF8oZSl7dmFyIHQ9ZS5kYXRhLGk9YVt0LndvcmtlcklkXSxyPSExO2lmKHQuZXJyb3IpaS51c2VyRXJyb3IodC5lcnJvcix0LmZpbGUpO2Vsc2UgaWYodC5yZXN1bHRzJiZ0LnJlc3VsdHMuZGF0YSl7dmFyIG49e2Fib3J0OmZ1bmN0aW9uKCl7cj0hMCxtKHQud29ya2VySWQse2RhdGE6W10sZXJyb3JzOltdLG1ldGE6e2Fib3J0ZWQ6ITB9fSl9LHBhdXNlOnkscmVzdW1lOnl9O2lmKE0oaS51c2VyU3RlcCkpe2Zvcih2YXIgcz0wO3M8dC5yZXN1bHRzLmRhdGEubGVuZ3RoJiYoaS51c2VyU3RlcCh7ZGF0YTp0LnJlc3VsdHMuZGF0YVtzXSxlcnJvcnM6dC5yZXN1bHRzLmVycm9ycyxtZXRhOnQucmVzdWx0cy5tZXRhfSxuKSwhcik7cysrKTtkZWxldGUgdC5yZXN1bHRzfWVsc2UgTShpLnVzZXJDaHVuaykmJihpLnVzZXJDaHVuayh0LnJlc3VsdHMsbix0LmZpbGUpLGRlbGV0ZSB0LnJlc3VsdHMpfXQuZmluaXNoZWQmJiFyJiZtKHQud29ya2VySWQsdC5yZXN1bHRzKX1mdW5jdGlvbiBtKGUsdCl7dmFyIGk9YVtlXTtNKGkudXNlckNvbXBsZXRlKSYmaS51c2VyQ29tcGxldGUodCksaS50ZXJtaW5hdGUoKSxkZWxldGUgYVtlXX1mdW5jdGlvbiB5KCl7dGhyb3cgbmV3IEVycm9yKFwiTm90IGltcGxlbWVudGVkLlwiKX1mdW5jdGlvbiB3KGUpe2lmKFwib2JqZWN0XCIhPXR5cGVvZiBlfHxudWxsPT09ZSlyZXR1cm4gZTt2YXIgdD1BcnJheS5pc0FycmF5KGUpP1tdOnt9O2Zvcih2YXIgaSBpbiBlKXRbaV09dyhlW2ldKTtyZXR1cm4gdH1mdW5jdGlvbiB2KGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7ZS5hcHBseSh0LGFyZ3VtZW50cyl9fWZ1bmN0aW9uIE0oZSl7cmV0dXJuXCJmdW5jdGlvblwiPT10eXBlb2YgZX1yZXR1cm4gbyYmKGYub25tZXNzYWdlPWZ1bmN0aW9uKGUpe3ZhciB0PWUuZGF0YTt2b2lkIDA9PT1iLldPUktFUl9JRCYmdCYmKGIuV09SS0VSX0lEPXQud29ya2VySWQpO2lmKFwic3RyaW5nXCI9PXR5cGVvZiB0LmlucHV0KWYucG9zdE1lc3NhZ2Uoe3dvcmtlcklkOmIuV09SS0VSX0lELHJlc3VsdHM6Yi5wYXJzZSh0LmlucHV0LHQuY29uZmlnKSxmaW5pc2hlZDohMH0pO2Vsc2UgaWYoZi5GaWxlJiZ0LmlucHV0IGluc3RhbmNlb2YgRmlsZXx8dC5pbnB1dCBpbnN0YW5jZW9mIE9iamVjdCl7dmFyIGk9Yi5wYXJzZSh0LmlucHV0LHQuY29uZmlnKTtpJiZmLnBvc3RNZXNzYWdlKHt3b3JrZXJJZDpiLldPUktFUl9JRCxyZXN1bHRzOmksZmluaXNoZWQ6ITB9KX19KSwobC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh1LnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yPWwsKGMucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodS5wcm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj1jLChwLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHAucHJvdG90eXBlKSkuY29uc3RydWN0b3I9cCwoZy5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh1LnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yPWcsYn0pOyIsInZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xudmFyIF9fZ2VuZXJhdG9yID0gKHRoaXMgJiYgdGhpcy5fX2dlbmVyYXRvcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIGJvZHkpIHtcbiAgICB2YXIgXyA9IHsgbGFiZWw6IDAsIHNlbnQ6IGZ1bmN0aW9uKCkgeyBpZiAodFswXSAmIDEpIHRocm93IHRbMV07IHJldHVybiB0WzFdOyB9LCB0cnlzOiBbXSwgb3BzOiBbXSB9LCBmLCB5LCB0LCBnO1xuICAgIHJldHVybiBnID0geyBuZXh0OiB2ZXJiKDApLCBcInRocm93XCI6IHZlcmIoMSksIFwicmV0dXJuXCI6IHZlcmIoMikgfSwgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIChnW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXM7IH0pLCBnO1xuICAgIGZ1bmN0aW9uIHZlcmIobikgeyByZXR1cm4gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHN0ZXAoW24sIHZdKTsgfTsgfVxuICAgIGZ1bmN0aW9uIHN0ZXAob3ApIHtcbiAgICAgICAgaWYgKGYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuXCIpO1xuICAgICAgICB3aGlsZSAoXykgdHJ5IHtcbiAgICAgICAgICAgIGlmIChmID0gMSwgeSAmJiAodCA9IG9wWzBdICYgMiA/IHlbXCJyZXR1cm5cIl0gOiBvcFswXSA/IHlbXCJ0aHJvd1wiXSB8fCAoKHQgPSB5W1wicmV0dXJuXCJdKSAmJiB0LmNhbGwoeSksIDApIDogeS5uZXh0KSAmJiAhKHQgPSB0LmNhbGwoeSwgb3BbMV0pKS5kb25lKSByZXR1cm4gdDtcbiAgICAgICAgICAgIGlmICh5ID0gMCwgdCkgb3AgPSBbb3BbMF0gJiAyLCB0LnZhbHVlXTtcbiAgICAgICAgICAgIHN3aXRjaCAob3BbMF0pIHtcbiAgICAgICAgICAgICAgICBjYXNlIDA6IGNhc2UgMTogdCA9IG9wOyBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IF8ubGFiZWwrKzsgcmV0dXJuIHsgdmFsdWU6IG9wWzFdLCBkb25lOiBmYWxzZSB9O1xuICAgICAgICAgICAgICAgIGNhc2UgNTogXy5sYWJlbCsrOyB5ID0gb3BbMV07IG9wID0gWzBdOyBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBjYXNlIDc6IG9wID0gXy5vcHMucG9wKCk7IF8udHJ5cy5wb3AoKTsgY29udGludWU7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEodCA9IF8udHJ5cywgdCA9IHQubGVuZ3RoID4gMCAmJiB0W3QubGVuZ3RoIC0gMV0pICYmIChvcFswXSA9PT0gNiB8fCBvcFswXSA9PT0gMikpIHsgXyA9IDA7IGNvbnRpbnVlOyB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gMyAmJiAoIXQgfHwgKG9wWzFdID4gdFswXSAmJiBvcFsxXSA8IHRbM10pKSkgeyBfLmxhYmVsID0gb3BbMV07IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gNiAmJiBfLmxhYmVsIDwgdFsxXSkgeyBfLmxhYmVsID0gdFsxXTsgdCA9IG9wOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgICBpZiAodCAmJiBfLmxhYmVsIDwgdFsyXSkgeyBfLmxhYmVsID0gdFsyXTsgXy5vcHMucHVzaChvcCk7IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICAgIGlmICh0WzJdKSBfLm9wcy5wb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG9wID0gYm9keS5jYWxsKHRoaXNBcmcsIF8pO1xuICAgICAgICB9IGNhdGNoIChlKSB7IG9wID0gWzYsIGVdOyB5ID0gMDsgfSBmaW5hbGx5IHsgZiA9IHQgPSAwOyB9XG4gICAgICAgIGlmIChvcFswXSAmIDUpIHRocm93IG9wWzFdOyByZXR1cm4geyB2YWx1ZTogb3BbMF0gPyBvcFsxXSA6IHZvaWQgMCwgZG9uZTogdHJ1ZSB9O1xuICAgIH1cbn07XG52YXIgUGFwYSA9IHJlcXVpcmUoXCJwYXBhcGFyc2VcIik7XG52YXIgZXJyb3JzID0gcmVxdWlyZShcIi4vZXJyb3JzLmpzXCIpO1xudmFyIGZyZWVDU1YySFRNTCA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gZnJlZUNTVjJIVE1MKCkge1xuICAgICAgICB0aGlzLl9kYXRhc1ZpZXdFbHQgPSB7IGlkOiBcIlwiLCBlbHRET006IHVuZGVmaW5lZCB9O1xuICAgICAgICB0aGlzLl9kYXRhc1NvdXJjZVVybCA9IFwiXCI7XG4gICAgICAgIHRoaXMuX2RhdGFzU2VsZWN0b3JzID0gW107XG4gICAgICAgIHRoaXMucGFyc2VNZXRhID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLnBhcnNlRGF0YXMgPSBbXTtcbiAgICAgICAgdGhpcy5wYXJzZUVycm9ycyA9IFtdO1xuICAgICAgICB0aGlzLmRhdGFzSFRNTCA9IFwiXCI7XG4gICAgICAgIHRoaXMuc3RvcElmUGFyc2VFcnJvcnMgPSBmYWxzZTtcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGZyZWVDU1YySFRNTC5wcm90b3R5cGUsIFwiZGF0YXNWaWV3RWx0XCIsIHtcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAoZWx0KSB7XG4gICAgICAgICAgICB2YXIgY2hlY2tDb250YWluZXJFeGlzdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGVsdC5pZCk7XG4gICAgICAgICAgICBpZiAoY2hlY2tDb250YWluZXJFeGlzdCA9PT0gbnVsbClcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyb3JzLmVsZW1lbnROb3RGb3VuZCArIGVsdC5pZCk7XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9kYXRhc1ZpZXdFbHQuaWQgPSBlbHQuaWQ7XG4gICAgICAgICAgICAgICAgdGhpcy5fZGF0YXNWaWV3RWx0LmVsdERPTSA9IGNoZWNrQ29udGFpbmVyRXhpc3Q7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZnJlZUNTVjJIVE1MLnByb3RvdHlwZSwgXCJkYXRhc1NvdXJjZVVybFwiLCB7XG4gICAgICAgIHNldDogZnVuY3Rpb24gKHVybCkge1xuICAgICAgICAgICAgaWYgKHVybC50cmltKCkubGVuZ3RoID09PSAwKVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihlcnJvcnMubmVlZFVybCk7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgdGhpcy5fZGF0YXNTb3VyY2VVcmwgPSB1cmwudHJpbSgpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGZyZWVDU1YySFRNTC5wcm90b3R5cGUsIFwiZGF0YXNTZWxlY3RvcnNcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9kYXRhc1NlbGVjdG9ycztcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAoc2VsZWN0aW9uRWx0cykge1xuICAgICAgICAgICAgdGhpcy5fZGF0YXNTZWxlY3RvcnMgPSBbXTtcbiAgICAgICAgICAgIHZhciBjaGVja0NvbnRhaW5lckV4aXN0O1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzZWxlY3Rpb25FbHRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY2hlY2tDb250YWluZXJFeGlzdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHNlbGVjdGlvbkVsdHNbaV0uaWQpO1xuICAgICAgICAgICAgICAgIGlmIChjaGVja0NvbnRhaW5lckV4aXN0ID09PSBudWxsKVxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9ycy5lbGVtZW50Tm90Rm91bmQgKyBzZWxlY3Rpb25FbHRzW2ldLmlkKTtcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChOdW1iZXIuaXNJbnRlZ2VyKHNlbGVjdGlvbkVsdHNbaV0uY29sQ1NWKSA9PT0gZmFsc2UgfHwgc2VsZWN0aW9uRWx0c1tpXS5jb2xDU1YgPCAwKVxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9ycy5uZWVkTmF0dXJhbE51bWJlcik7XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbkVsdHNbaV0uZWx0RE9NID0gY2hlY2tDb250YWluZXJFeGlzdDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGF0YXNTZWxlY3RvcnMucHVzaChzZWxlY3Rpb25FbHRzW2ldKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBmcmVlQ1NWMkhUTUwucHJvdG90eXBlLnBhcnNlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgY29udmVydGVyO1xuICAgICAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYSkge1xuICAgICAgICAgICAgICAgIGNvbnZlcnRlciA9IHRoaXM7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFsyLCBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29udmVydGVyLl9kYXRhc1NvdXJjZVVybCAhPT0gXCJcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhcGEucGFyc2UoY29udmVydGVyLl9kYXRhc1NvdXJjZVVybCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdW90ZUNoYXI6ICdcIicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcjogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGxldGU6IGZ1bmN0aW9uIChyZXN1bHRzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb252ZXJ0ZXIucGFyc2VFcnJvcnMgPSByZXN1bHRzLmVycm9ycztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnZlcnRlci5wYXJzZURhdGFzID0gcmVzdWx0cy5kYXRhO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlYWxGaWVsZHMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgaW4gcmVzdWx0cy5tZXRhLmZpZWxkcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHRzLm1ldGEuZmllbGRzW2ldLnRyaW0oKSAhPT0gXCJcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhbEZpZWxkcy5wdXNoKHJlc3VsdHMubWV0YS5maWVsZHNbaV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0cy5tZXRhLmZpZWxkcyA9IHJlYWxGaWVsZHM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb252ZXJ0ZXIucGFyc2VNZXRhID0gcmVzdWx0cy5tZXRhO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3I6IGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihlcnJvcnMucGFyc2VyRmFpbCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3dubG9hZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2tpcEVtcHR5TGluZXM6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihlcnJvcnMubmVlZFVybCkpO1xuICAgICAgICAgICAgICAgICAgICB9KV07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBmcmVlQ1NWMkhUTUwucHJvdG90eXBlLnJ1biA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGNvbnZlcnRlcl8xLCBzZWxlY3RvcnNIVE1MLCBpLCB2YWx1ZXMsIGNvbE5hbWUsIHJvdywgaiwgc2VsZWN0RWxlbWVudDtcbiAgICAgICAgICAgIHJldHVybiBfX2dlbmVyYXRvcih0aGlzLCBmdW5jdGlvbiAoX2EpIHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKF9hLmxhYmVsKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9kYXRhc1ZpZXdFbHQuZWx0RE9NID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGVycm9ycy5uZWVkRGF0YXNFbHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2RhdGFzU291cmNlVXJsID09PSBcIlwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihlcnJvcnMubmVlZFVybCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzQsIHRoaXMucGFyc2UoKV07XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgICAgIF9hLnNlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnBhcnNlRGF0YXMubGVuZ3RoID09PSAwIHx8IHRoaXMucGFyc2VNZXRhLmZpZWxkcyA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihlcnJvcnMuZGF0YXNOb3RGb3VuZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh0aGlzLnN0b3BJZlBhcnNlRXJyb3JzICYmIHRoaXMucGFyc2VFcnJvcnMubGVuZ3RoICE9PSAwKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IodGhpcy5wYXJzZUVycm9ycyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb252ZXJ0ZXJfMSA9IHRoaXM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhc0hUTUwgPSB0aGlzLmNyZWF0ZURhdGFzSFRNTCh0aGlzLnBhcnNlTWV0YS5maWVsZHMsIHRoaXMucGFyc2VEYXRhcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGF0YXNWaWV3RWx0LmVsdERPTS5pbm5lckhUTUwgPSB0aGlzLmRhdGFzSFRNTDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fZGF0YXNTZWxlY3RvcnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RvcnNIVE1MID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSBpbiB0aGlzLl9kYXRhc1NlbGVjdG9ycykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2RhdGFzU2VsZWN0b3JzW2ldLmNvbENTViA+ICh0aGlzLnBhcnNlTWV0YS5maWVsZHMubGVuZ3RoIC0gMSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGVycm9ycy5zZWxlY3RvckZpZWxkTm90Rm91bmQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzID0gW10sIGNvbE5hbWUgPSB0aGlzLnBhcnNlTWV0YS5maWVsZHNbdGhpcy5fZGF0YXNTZWxlY3RvcnNbaV0uY29sQ1NWXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHJvdyBpbiB0aGlzLnBhcnNlRGF0YXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlcy5pbmRleE9mKHRoaXMucGFyc2VEYXRhc1tyb3ddW2NvbE5hbWVdLnRyaW0oKSkgPT09IC0xKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzLnB1c2godGhpcy5wYXJzZURhdGFzW3Jvd11bY29sTmFtZV0udHJpbSgpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcy5zb3J0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2RhdGFzU2VsZWN0b3JzW2ldLm5hbWUgPSBjb2xOYW1lO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9kYXRhc1NlbGVjdG9yc1tpXS52YWx1ZXMgPSB2YWx1ZXM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdG9yc0hUTUxbaV0gPSBcIjxsYWJlbCBmb3I9J0NTVkRhdGFzU2VsZWN0b3JcIiArIGkgKyBcIic+XCIgKyBjb2xOYW1lICsgXCIgOiA8L2xhYmVsPjxzZWxlY3QgbmFtZT0nQ1NWRGF0YXNTZWxlY3RvclwiICsgaSArIFwiJyBpZD0nQ1NWRGF0YXNTZWxlY3RvclwiICsgaSArIFwiJz48b3B0aW9uIHZhbHVlPScwJz4tLS0tPC9vcHRpb24+XCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaiBpbiB2YWx1ZXMpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RvcnNIVE1MW2ldICs9IFwiPG9wdGlvbiB2YWx1ZT0nXCIgKyAoTnVtYmVyKGopICsgMSkgKyBcIic+XCIgKyB2YWx1ZXNbal0gKyBcIjwvb3B0aW9uPlwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RvcnNIVE1MW2ldICs9IFwiPC9zZWxlY3Q+XCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2RhdGFzU2VsZWN0b3JzW2ldLmVsdERPTS5pbm5lckhUTUwgPSBzZWxlY3RvcnNIVE1MW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJDU1ZEYXRhc1NlbGVjdG9yXCIgKyBpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCBmdW5jdGlvbiAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udmVydGVyXzEuZGF0YXNIVE1MID0gY29udmVydGVyXzEuY3JlYXRlRGF0YXNIVE1MKGNvbnZlcnRlcl8xLnBhcnNlTWV0YS5maWVsZHMsIGNvbnZlcnRlcl8xLnBhcnNlRGF0YXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udmVydGVyXzEuX2RhdGFzVmlld0VsdC5lbHRET00uaW5uZXJIVE1MID0gY29udmVydGVyXzEuZGF0YXNIVE1MO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsyLCB0cnVlXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbMl07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgZnJlZUNTVjJIVE1MLnByb3RvdHlwZS5jcmVhdGVEYXRhc0hUTUwgPSBmdW5jdGlvbiAoZmllbGRzLCBkYXRhcykge1xuICAgICAgICB2YXIgY2hlY2tTZWxlY3RvckV4aXN0LCBmaWx0ZXJzID0gW107XG4gICAgICAgIGZvciAodmFyIGkgaW4gdGhpcy5fZGF0YXNTZWxlY3RvcnMpIHtcbiAgICAgICAgICAgIGNoZWNrU2VsZWN0b3JFeGlzdCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIjXCIgKyB0aGlzLl9kYXRhc1NlbGVjdG9yc1tpXS5pZCArIFwiIHNlbGVjdFwiKTtcbiAgICAgICAgICAgIGlmIChjaGVja1NlbGVjdG9yRXhpc3QgIT0gbnVsbCAmJiBjaGVja1NlbGVjdG9yRXhpc3QudmFsdWUgIT0gXCIwXCIpXG4gICAgICAgICAgICAgICAgZmlsdGVycy5wdXNoKHsgZmllbGQ6IHRoaXMuX2RhdGFzU2VsZWN0b3JzW2ldLm5hbWUsIHZhbHVlOiB0aGlzLl9kYXRhc1NlbGVjdG9yc1tpXS52YWx1ZXNbY2hlY2tTZWxlY3RvckV4aXN0LnNlbGVjdGVkSW5kZXggLSAxXSB9KTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgZGF0YXNIVE1MID0gXCI8dGFibGU+PHRoZWFkPlwiO1xuICAgICAgICBmb3IgKHZhciBpIGluIGZpZWxkcylcbiAgICAgICAgICAgIGRhdGFzSFRNTCArPSBcIjx0aD5cIiArIGZpZWxkc1tpXSArIFwiPC90aD5cIjtcbiAgICAgICAgZGF0YXNIVE1MICs9IFwiPC90aGVhZD48dGJvZHk+XCI7XG4gICAgICAgIGZvciAodmFyIHJvdyBpbiBkYXRhcykge1xuICAgICAgICAgICAgdmFyIHZpc2libGUgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKGZpbHRlcnMubGVuZ3RoICE9PSAwKSB7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSBpbiBmaWx0ZXJzKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChkYXRhc1tyb3ddW2ZpbHRlcnNbaV0uZmllbGRdLnRyaW0oKSAhPSBmaWx0ZXJzW2ldLnZhbHVlKVxuICAgICAgICAgICAgICAgICAgICAgICAgdmlzaWJsZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh2aXNpYmxlKSB7XG4gICAgICAgICAgICAgICAgZGF0YXNIVE1MICs9IFwiPHRyPlwiO1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGZpZWxkIGluIGRhdGFzW3Jvd10pIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZpZWxkcy5pbmRleE9mKGZpZWxkKSAhPT0gLTEpXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhc0hUTUwgKz0gXCI8dGQ+XCIgKyBkYXRhc1tyb3ddW2ZpZWxkXSArIFwiPC90ZD5cIjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZGF0YXNIVE1MICs9IFwiPC90cj5cIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBkYXRhc0hUTUwgKz0gXCI8L3Rib2R5PjwvdGFibGU+XCI7XG4gICAgICAgIHJldHVybiBkYXRhc0hUTUw7XG4gICAgfTtcbiAgICByZXR1cm4gZnJlZUNTVjJIVE1MO1xufSgpKTtcbmV4cG9ydCB7IGZyZWVDU1YySFRNTCB9O1xuIiwibW9kdWxlLmV4cG9ydHMgPVxue1xuICAgIGRhdGFzTm90Rm91bmQgOiBcIkF1Y3VuZSBkb25uw6llIG4nYSDDqXTDqSB0cm91dsOpZS5cIixcbiAgICBlbGVtZW50Tm90Rm91bmQgOiBcIkF1Y3VuIMOpbMOpbWVudCBIVE1MIG4nYSDDqXTDqSB0cm91dsOpIGF5YW50IGNvbW1lIFxcXCJpZFxcXCIgOiBcIixcbiAgICBuZWVkRGF0YXNFbHQ6IFwiTWVyY2kgZGUgZm91cm5pciB1biBpZCB2YWxpZGUgcG91ciBsJ8OpbMOpbWVudCBvw7kgYWZmaWNoZXIgbGVzIGRvbm7DqWVzLlwiLFxuICAgIG5lZWROYXR1cmFsTnVtYmVyOiBcIk1lcmNpIGRlIGZvdXJuaXIgdW4gbm9tYnJlIGVudGllciBzdXDDqXJpZXVyIG91IMOpZ2FsIMOgIHrDqXJvIHBvdXIgZMOpc2lnbmVyIGNoYXF1ZSBjb2xvbm5lLlwiLFxuICAgIG5lZWRVcmw6IFwiTWVyY2kgZGUgZm91cm5pciB1bmUgdXJsIHZhbGlkZSBwb3VyIGxlIGZpY2hpZXIgQ1NWIMOgIHBhcnNlci5cIixcbiAgICBwYXJzZXJGYWlsOiBcIkxhIGxlY3R1cmUgZGVzIGRvbm7DqWVzIGR1IGZpY2hpZXIgYSDDqWNob3XDqS5cIixcbiAgICBzZWxlY3RvckZpZWxkTm90Rm91bmQ6IFwiQXUgbW9pbnMgdW5lIGRlcyBjb2xvbm5lcyBkZXZhbnQgc2VydmlyIMOgIGZpbHRyZXIgbGVzIGRvbm7DqWVzIG4nZXhpc3RlIHBhcyBkYW5zIGxlIGZpY2hpZXIuXCIsXG59OyIsIi8vIFRoZSBtb2R1bGUgY2FjaGVcbnZhciBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18gPSB7fTtcblxuLy8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbmZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG5cdHZhciBjYWNoZWRNb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdO1xuXHRpZiAoY2FjaGVkTW9kdWxlICE9PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gY2FjaGVkTW9kdWxlLmV4cG9ydHM7XG5cdH1cblx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcblx0dmFyIG1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF0gPSB7XG5cdFx0Ly8gbm8gbW9kdWxlLmlkIG5lZWRlZFxuXHRcdC8vIG5vIG1vZHVsZS5sb2FkZWQgbmVlZGVkXG5cdFx0ZXhwb3J0czoge31cblx0fTtcblxuXHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cblx0X193ZWJwYWNrX21vZHVsZXNfX1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cblx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcblx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xufVxuXG4iLCIvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9ucyBmb3IgaGFybW9ueSBleHBvcnRzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSAoZXhwb3J0cywgZGVmaW5pdGlvbikgPT4ge1xuXHRmb3IodmFyIGtleSBpbiBkZWZpbml0aW9uKSB7XG5cdFx0aWYoX193ZWJwYWNrX3JlcXVpcmVfXy5vKGRlZmluaXRpb24sIGtleSkgJiYgIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBrZXkpKSB7XG5cdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywga2V5LCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZGVmaW5pdGlvbltrZXldIH0pO1xuXHRcdH1cblx0fVxufTsiLCJfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSAob2JqLCBwcm9wKSA9PiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgcHJvcCkpIiwiLy8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yID0gKGV4cG9ydHMpID0+IHtcblx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG5cdH1cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbn07IiwidmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG52YXIgX19nZW5lcmF0b3IgPSAodGhpcyAmJiB0aGlzLl9fZ2VuZXJhdG9yKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgYm9keSkge1xuICAgIHZhciBfID0geyBsYWJlbDogMCwgc2VudDogZnVuY3Rpb24oKSB7IGlmICh0WzBdICYgMSkgdGhyb3cgdFsxXTsgcmV0dXJuIHRbMV07IH0sIHRyeXM6IFtdLCBvcHM6IFtdIH0sIGYsIHksIHQsIGc7XG4gICAgcmV0dXJuIGcgPSB7IG5leHQ6IHZlcmIoMCksIFwidGhyb3dcIjogdmVyYigxKSwgXCJyZXR1cm5cIjogdmVyYigyKSB9LCB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgKGdbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpczsgfSksIGc7XG4gICAgZnVuY3Rpb24gdmVyYihuKSB7IHJldHVybiBmdW5jdGlvbiAodikgeyByZXR1cm4gc3RlcChbbiwgdl0pOyB9OyB9XG4gICAgZnVuY3Rpb24gc3RlcChvcCkge1xuICAgICAgICBpZiAoZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy5cIik7XG4gICAgICAgIHdoaWxlIChfKSB0cnkge1xuICAgICAgICAgICAgaWYgKGYgPSAxLCB5ICYmICh0ID0gb3BbMF0gJiAyID8geVtcInJldHVyblwiXSA6IG9wWzBdID8geVtcInRocm93XCJdIHx8ICgodCA9IHlbXCJyZXR1cm5cIl0pICYmIHQuY2FsbCh5KSwgMCkgOiB5Lm5leHQpICYmICEodCA9IHQuY2FsbCh5LCBvcFsxXSkpLmRvbmUpIHJldHVybiB0O1xuICAgICAgICAgICAgaWYgKHkgPSAwLCB0KSBvcCA9IFtvcFswXSAmIDIsIHQudmFsdWVdO1xuICAgICAgICAgICAgc3dpdGNoIChvcFswXSkge1xuICAgICAgICAgICAgICAgIGNhc2UgMDogY2FzZSAxOiB0ID0gb3A7IGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgNDogXy5sYWJlbCsrOyByZXR1cm4geyB2YWx1ZTogb3BbMV0sIGRvbmU6IGZhbHNlIH07XG4gICAgICAgICAgICAgICAgY2FzZSA1OiBfLmxhYmVsKys7IHkgPSBvcFsxXTsgb3AgPSBbMF07IGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGNhc2UgNzogb3AgPSBfLm9wcy5wb3AoKTsgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICBpZiAoISh0ID0gXy50cnlzLCB0ID0gdC5sZW5ndGggPiAwICYmIHRbdC5sZW5ndGggLSAxXSkgJiYgKG9wWzBdID09PSA2IHx8IG9wWzBdID09PSAyKSkgeyBfID0gMDsgY29udGludWU7IH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSAzICYmICghdCB8fCAob3BbMV0gPiB0WzBdICYmIG9wWzFdIDwgdFszXSkpKSB7IF8ubGFiZWwgPSBvcFsxXTsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSA2ICYmIF8ubGFiZWwgPCB0WzFdKSB7IF8ubGFiZWwgPSB0WzFdOyB0ID0gb3A7IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICAgIGlmICh0ICYmIF8ubGFiZWwgPCB0WzJdKSB7IF8ubGFiZWwgPSB0WzJdOyBfLm9wcy5wdXNoKG9wKTsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHRbMl0pIF8ub3BzLnBvcCgpO1xuICAgICAgICAgICAgICAgICAgICBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb3AgPSBib2R5LmNhbGwodGhpc0FyZywgXyk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHsgb3AgPSBbNiwgZV07IHkgPSAwOyB9IGZpbmFsbHkgeyBmID0gdCA9IDA7IH1cbiAgICAgICAgaWYgKG9wWzBdICYgNSkgdGhyb3cgb3BbMV07IHJldHVybiB7IHZhbHVlOiBvcFswXSA/IG9wWzFdIDogdm9pZCAwLCBkb25lOiB0cnVlIH07XG4gICAgfVxufTtcbmltcG9ydCB7IGZyZWVDU1YySFRNTCB9IGZyb20gXCIuL2ZyZWVDU1YySFRNTFwiO1xudmFyIGluaXRpYWxpc2UgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xuICAgIHZhciBjb252ZXJ0ZXIsIGVfMTtcbiAgICByZXR1cm4gX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24gKF9hKSB7XG4gICAgICAgIHN3aXRjaCAoX2EubGFiZWwpIHtcbiAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICBfYS50cnlzLnB1c2goWzAsIDIsICwgM10pO1xuICAgICAgICAgICAgICAgIGNvbnZlcnRlciA9IG5ldyBmcmVlQ1NWMkhUTUwoKTtcbiAgICAgICAgICAgICAgICBjb252ZXJ0ZXIuZGF0YXNWaWV3RWx0ID0geyBpZDogXCJkYXRhc1wiIH07XG4gICAgICAgICAgICAgICAgY29udmVydGVyLmRhdGFzU2VsZWN0b3JzID0gW3sgY29sQ1NWOiAzLCBpZDogXCJmaWx0cmUxXCIgfSwgeyBjb2xDU1Y6IDQsIGlkOiBcImZpbHRyZTJcIiB9XTtcbiAgICAgICAgICAgICAgICBjb252ZXJ0ZXIuZGF0YXNTb3VyY2VVcmwgPSBcImh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC9kYXRhcy9lbGVtZW50cy1jaGltaXF1ZXMuY3N2XCI7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFs0LCBjb252ZXJ0ZXIucnVuKCldO1xuICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgIF9hLnNlbnQoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gWzMsIDNdO1xuICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgIGVfMSA9IF9hLnNlbnQoKTtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGVfMSk7XG4gICAgICAgICAgICAgICAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiZGF0YXNcIikgIT09IG51bGwpXG4gICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiZGF0YXNcIikuaW5uZXJIVE1MID0gXCI8c3Ryb25nPkTDqXNvbMOpLCBtYWlzIHVuIHByb2Jsw6htZSB0ZWNobmlxdWUgZW1ww6pjaGUgbCdhZmZpY2hhZ2UgZGVzIGRvbm7DqWVzLjwvc3Ryb25nPlwiO1xuICAgICAgICAgICAgICAgIHJldHVybiBbMywgM107XG4gICAgICAgICAgICBjYXNlIDM6IHJldHVybiBbMl07XG4gICAgICAgIH1cbiAgICB9KTtcbn0pOyB9O1xuaW5pdGlhbGlzZSgpO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9 \ No newline at end of file diff --git a/public/datas/elements-chimiques.csv b/public/datas/elements-chimiques.csv index 2c5d808..8440e49 100644 --- a/public/datas/elements-chimiques.csv +++ b/public/datas/elements-chimiques.csv @@ -1,96 +1,96 @@ -Z (numéro atomique),Élément,Symbole,Famille,Abondance des éléments dans la croûte terrestre (μg/k) -1,Hydrogène,H,Non-métal,> 100000 -2,Hélium,He,Gaz noble,> 1 et < 100 000 -3,Lithium,Li,Métal alcalin,> 1 et < 100 000 -4,Béryllium,Be,Métal alcalino-terreux,> 1 et < 100 000 -5,Bore,B,Métalloïde,> 1 et < 100 000 -6,Carbone,C,Non-métal,> 100000 -7,Azote,N,Non-métal,> 1 et < 100 000 -8,Oxygène,O,Non-métal,> 100000 -9,Fluor,F,Halogène,> 100000 -10,Néon,Ne,Gaz noble,> 1 et < 100 000 -11,Sodium,Na,Métal alcalin,> 100000 -12,Magnésium,Mg,Métal alcalino-terreux,> 100000 -13,Aluminium,Al,Métal pauvre,> 100000 -14,Silicium,Si,Métalloïde,> 100000 -15,Phosphore,P,Non-métal,> 100000 -16,Soufre,S,Non-métal,> 100000 -17,Chlore,Cl,Halogène,> 100000 -18,Argon,Ar,Gaz noble,> 1 et < 100 000 -19,Potassium,K,Métal alcalin,> 100000 -20,Calcium,Ca,Métal alcalino-terreux,> 100000 -21,Scandium,Sc,Métal de transition,> 1 et < 100 000 -22,Titane,Ti,Métal de transition,> 100000 -23,Vanadium,V,Métal de transition,> 100000 -24,Chrome,Cr,Métal de transition,> 100000 -25,Manganèse,Mn,Métal de transition,> 100000 -26,Fer,Fe,Métal de transition,> 100000 -27,Cobalt,Co,Métal de transition,> 1 et < 100 000 -28,Nickel,Ni,Métal de transition,> 1 et < 100 000 -29,Cuivre,Cu,Métal de transition,> 1 et < 100 000 -30,Zinc,Zn,Métal pauvre,> 1 et < 100 000 -31,Gallium,Ga,Métal pauvre,> 1 et < 100 000 -32,Germanium,Ge,Métalloïde,> 1 et < 100 000 -33,Arsenic,As,Métalloïde,> 1 et < 100 000 -34,Sélénium,Se,Non-métal,> 1 et < 100 000 -35,Brome,Br,Halogène,> 1 et < 100 000 -36,Krypton,Kr,gaz rare,≤ 1 -37,Rubidium,Rb,Métal alcalin,> 1 et < 100 000 -38,Strontium,Sr,Métal alcalino-terreux,> 100000 -39,Yttrium,Y,Métal de transition,> 1 et < 100 000 -40,Zirconium,Zr,Métal de transition,> 100000 -41,Niobium,Nb,Métal de transition,> 1 et < 100 000 -42,Molybdène,Mo,Métal de transition,> 1 et < 100 000 +Z (numéro atomique),Élément,Symbole,Famille,Abondance dans la croûte terrestre +1,Hydrogène,H,Non-métal,Importante +2,Hélium,He,Gaz noble,Significative +3,Lithium,Li,Métal alcalin,Significative +4,Béryllium,Be,Métal alcalino-terreux,Significative +5,Bore,B,Métalloïde,Significative +6,Carbone,C,Non-métal,Importante +7,Azote,N,Non-métal,Significative +8,Oxygène,O,Non-métal,Importante +9,Fluor,F,Halogène,Importante +10,Néon,Ne,Gaz noble,Significative +11,Sodium,Na,Métal alcalin,Importante +12,Magnésium,Mg,Métal alcalino-terreux,Importante +13,Aluminium,Al,Métal pauvre,Importante +14,Silicium,Si,Métalloïde,Importante +15,Phosphore,P,Non-métal,Importante +16,Soufre,S,Non-métal,Importante +17,Chlore,Cl,Halogène,Importante +18,Argon,Ar,Gaz noble,Significative +19,Potassium,K,Métal alcalin,Importante +20,Calcium,Ca,Métal alcalino-terreux,Importante +21,Scandium,Sc,Métal de transition,Significative +22,Titane,Ti,Métal de transition,Importante +23,Vanadium,V,Métal de transition,Importante +24,Chrome,Cr,Métal de transition,Importante +25,Manganèse,Mn,Métal de transition,Importante +26,Fer,Fe,Métal de transition,Importante +27,Cobalt,Co,Métal de transition,Significative +28,Nickel,Ni,Métal de transition,Significative +29,Cuivre,Cu,Métal de transition,Significative +30,Zinc,Zn,Métal pauvre,Significative +31,Gallium,Ga,Métal pauvre,Significative +32,Germanium,Ge,Métalloïde,Significative +33,Arsenic,As,Métalloïde,Significative +34,Sélénium,Se,Non-métal,Significative +35,Brome,Br,Halogène,Significative +36,Krypton,Kr,gaz rare,Faible +37,Rubidium,Rb,Métal alcalin,Significative +38,Strontium,Sr,Métal alcalino-terreux,Importante +39,Yttrium,Y,Métal de transition,Significative +40,Zirconium,Zr,Métal de transition,Importante +41,Niobium,Nb,Métal de transition,Significative +42,Molybdène,Mo,Métal de transition,Significative 43,Technétium,Tc,Métal de transition,Traces -44,Ruthénium,Ru,Métal de transition,≤ 1 -45,Rhodium,Rh,Métal de transition,≤ 1 -46,Palladium,Pd,Métal de transition,> 1 et < 100 000 -47,Argent,Ag,Métal de transition,> 1 et < 100 000 -48,Cadmium,Cd,Métal pauvre,> 1 et < 100 000 -49,Indium,In,Métal pauvre,> 1 et < 100 000 -50,Étain,Sn,Métal pauvre,> 1 et < 100 000 -51,Antimoine,Sb,Métalloïde,> 1 et < 100 000 -52,Tellure,Te,Métalloïde,≤ 1 -53,Iode,I,Halogène,> 1 et < 100 000 -54,Xénon,Xe,gaz rare,≤ 1 -55,Césium,Cs,Métal alcalin,> 1 et < 100 000 -56,Baryum,Ba,Métal alcalino-terreux,> 100000 -57,Lanthane,La,Lanthanide,> 1 et < 100 000 -58,Cérium,Ce,Lanthanide,> 1 et < 100 000 -59,Praséodyme,Pr,Lanthanide,> 1 et < 100 000 -60,Néodyme,Nd,Lanthanide,> 1 et < 100 000 +44,Ruthénium,Ru,Métal de transition,Faible +45,Rhodium,Rh,Métal de transition,Faible +46,Palladium,Pd,Métal de transition,Significative +47,Argent,Ag,Métal de transition,Significative +48,Cadmium,Cd,Métal pauvre,Significative +49,Indium,In,Métal pauvre,Significative +50,Étain,Sn,Métal pauvre,Significative +51,Antimoine,Sb,Métalloïde,Significative +52,Tellure,Te,Métalloïde,Faible +53,Iode,I,Halogène,Significative +54,Xénon,Xe,gaz rare,Faible +55,Césium,Cs,Métal alcalin,Significative +56,Baryum,Ba,Métal alcalino-terreux,Importante +57,Lanthane,La,Lanthanide,Significative +58,Cérium,Ce,Lanthanide,Significative +59,Praséodyme,Pr,Lanthanide,Significative +60,Néodyme,Nd,Lanthanide,Significative 61,Prométhium,Pm,Lanthanide,Traces -62,Samarium,Sm,Lanthanide,> 1 et < 100 000 -63,Europium,Eu,Lanthanide,> 1 et < 100 000 -64,Gadolinium,Gd,Lanthanide,> 1 et < 100 000 -65,Terbium,Tb,Lanthanide,> 1 et < 100 000 -66,Dysprosium,Dy,Lanthanide,> 1 et < 100 000 -67,Holmium,Ho,Lanthanide,> 1 et < 100 000 -68,Erbium,Er,Lanthanide,> 1 et < 100 000 -69,Thulium,Tm,Lanthanide,> 1 et < 100 000 -70,Ytterbium,Yb,Lanthanide,> 1 et < 100 000 -71,Lutécium,Lu,Lanthanide,> 1 et < 100 000 -72,Hafnium,Hf,Métal de transition,> 1 et < 100 000 -73,Tantale,Ta,Métal de transition,> 1 et < 100 000 -74,Tungstène,W,Métal de transition,> 1 et < 100 000 -75,Rhénium,Re,Métal de transition,≤ 1 -76,Osmium,Os,Métal de transition,> 1 et < 100 000 -77,Iridium,Ir,Métal de transition,≤ 1 -78,Platine,Pt,Métal de transition,> 1 et < 100 000 -79,Or,Au,Métal de transition,> 1 et < 100 000 -80,Mercure,Hg,Métal pauvre,> 1 et < 100 000 -81,Thallium,Tl,Métal pauvre,> 1 et < 100 000 -82,Plomb,Pb,Métal pauvre,> 1 et < 100 000 -83,Bismuth,Bi,Métal pauvre,> 1 et < 100 000 -84,Polonium,Po,Métal pauvre,≤ 1 +62,Samarium,Sm,Lanthanide,Significative +63,Europium,Eu,Lanthanide,Significative +64,Gadolinium,Gd,Lanthanide,Significative +65,Terbium,Tb,Lanthanide,Significative +66,Dysprosium,Dy,Lanthanide,Significative +67,Holmium,Ho,Lanthanide,Significative +68,Erbium,Er,Lanthanide,Significative +69,Thulium,Tm,Lanthanide,Significative +70,Ytterbium,Yb,Lanthanide,Significative +71,Lutécium,Lu,Lanthanide,Significative +72,Hafnium,Hf,Métal de transition,Significative +73,Tantale,Ta,Métal de transition,Significative +74,Tungstène,W,Métal de transition,Significative +75,Rhénium,Re,Métal de transition,Faible +76,Osmium,Os,Métal de transition,Significative +77,Iridium,Ir,Métal de transition,Faible +78,Platine,Pt,Métal de transition,Significative +79,Or,Au,Métal de transition,Significative +80,Mercure,Hg,Métal pauvre,Significative +81,Thallium,Tl,Métal pauvre,Significative +82,Plomb,Pb,Métal pauvre,Significative +83,Bismuth,Bi,Métal pauvre,Significative +84,Polonium,Po,Métal pauvre,Faible 85,Astate,At,Métalloïde,Traces -86,Radon,Rn,Gaz noble,≤ 1 +86,Radon,Rn,Gaz noble,Faible 87,Francium,Fr,Métal alcalin,Traces -88,Radium,Ra,Métal alcalino-terreux,≤ 1 -89,Actinium,Ac,Actinide,≤ 1 -90,Thorium,Th,Actinide,> 1 et < 100 000 -91,Protactinium,Pa,Actinide,≤ 1 -92,Uranium,U,Actinide,> 1 et < 100 000 +88,Radium,Ra,Métal alcalino-terreux,Faible +89,Actinium,Ac,Actinide,Faible +90,Thorium,Th,Actinide,Significative +91,Protactinium,Pa,Actinide,Faible +92,Uranium,U,Actinide,Significative 93,Neptunium,Np,Actinide,Traces 94,Plutonium,Pu,Actinide,Traces 95,Américium,Am,Actinide,Inexistant diff --git a/public/index.html b/public/index.html index f8884a7..76709ec 100644 --- a/public/index.html +++ b/public/index.html @@ -3,18 +3,19 @@ - + + - freeCSV2HTML (démo utilisation simple) + freeDatas2HTML : démo affichage données venant d'un fichier CSV. - -

freeCSV2HTML

+ +

freeDatas2HTML

Si tout se passe bien, ce texte sera remplacé par un tableau de données extraites du fichier csv.

- + \ No newline at end of file diff --git a/src/firstExample.ts b/src/firstExample.ts index c6f3928..a4f998a 100644 --- a/src/firstExample.ts +++ b/src/firstExample.ts @@ -13,6 +13,8 @@ const initialise = async () => catch(e) { console.error(e); + if(document.getElementById("datas")!==null) + document.getElementById("datas")!.innerHTML="Désolé, mais un problème technique empêche l'affichage des données."; } } initialise(); \ No newline at end of file