Socket
Socket
Sign inDemoInstall

express-cassandra

Package Overview
Dependencies
Maintainers
1
Versions
98
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

express-cassandra - npm Package Compare versions

Comparing version 2.8.0 to 2.9.0

.nyc_output/ef6768ea-c6fb-4462-96b9-4c5175e21794.json

19

CHANGELOG.md

@@ -9,2 +9,18 @@ # Changelog

## [2.9.0] - 2023-04-01
### Added
- Scylladb 5.x is now officially supported
- All LTS versions >= NodeJS 12 are now officially supported
### Changed
- Removed official support for Node version < 12, may still work in older versions
### Fixed
- Scylladb index conflict with materialized views
- Incorrect where clause comparison in schema matching logic for scylladb
### Security
- Upgraded package dependencies to resolve vulnerability in dependent packages
## [2.8.0] - 2022-03-12

@@ -573,3 +589,4 @@

[Unreleased]: https://github.com/masumsoft/express-cassandra/compare/v2.8.0...master
[Unreleased]: https://github.com/masumsoft/express-cassandra/compare/v2.9.0...master
[2.9.0]: https://github.com/masumsoft/express-cassandra/compare/v2.8.0...v2.9.0
[2.8.0]: https://github.com/masumsoft/express-cassandra/compare/v2.7.0...v2.8.0

@@ -576,0 +593,0 @@ [2.7.0]: https://github.com/masumsoft/express-cassandra/compare/v2.6.0...v2.7.0

6

CONTRIBUTING.md

@@ -38,9 +38,9 @@ ## Contributing to Express Cassandra

- Execute `npm install` to install the necessary dependencies
- Download the preconfigured [elassandra+janusgraph](https://www.dropbox.com/s/vebuzbdql0w6eap/elassandra_janusgraph_distribution.zip?dl=1) for running tests. Some of the test cases require configuration changes in cassandra, elassandra and janusgraph. [Elassandra](http://www.elassandra.io/) and [JanusGraph](http://janusgraph.org/) is required for test cases that are related to supporting them.
- Start the elassandra instance
- Start the janusgraph instance
- Run an instance of cassandra or scylladb with `materialized_views_enabled`, `sasi_indexes_enabled` and `user_defined_functions_enabled` configurations set to `true`
- Now execute `npm test` to run the tests (we're using [mocha](http://mochajs.org/))
> To test elassandra and janusgraph related functionalities, download the preconfigured [elassandra+janusgraph](https://www.dropbox.com/s/vebuzbdql0w6eap/elassandra_janusgraph_distribution.zip?dl=1) for running tests. Some of the test cases require configuration changes in cassandra, elassandra and janusgraph. [Elassandra](http://www.elassandra.io/) and [JanusGraph](http://janusgraph.org/) is required for test cases that are related to supporting them.
### Writing Documentation
To contribute to the [documentation](http://express-cassandra.readthedocs.io/) just make your changes to the relevant `*.md` file in the [docs](https://github.com/masumsoft/express-cassandra/tree/master/docs) directory in the master branch and submit a [pull request](https://help.github.com/articles/using-pull-requests/). You might also use the github [Edit](https://github.com/blog/844-forking-with-the-edit-button) button.

@@ -1,63 +0,87 @@

var jumpToCode = (function init () {
// Classes of code we would like to highlight
var missingCoverageClasses = [ '.cbranch-no', '.cstat-no', '.fstat-no' ];
/* eslint-disable */
var jumpToCode = (function init() {
// Classes of code we would like to highlight in the file view
var missingCoverageClasses = ['.cbranch-no', '.cstat-no', '.fstat-no'];
// We don't want to select elements that are direct descendants of another match
var notSelector = ':not(' + missingCoverageClasses.join('):not(') + ') > '; // becomes `:not(a):not(b) > `
// Elements to highlight in the file listing view
var fileListingElements = ['td.pct.low'];
// Selecter that finds elements on the page to which we can jump
var selector = notSelector + missingCoverageClasses.join(', ' + notSelector); // becomes `:not(a):not(b) > a, :not(a):not(b) > b`
// We don't want to select elements that are direct descendants of another match
var notSelector = ':not(' + missingCoverageClasses.join('):not(') + ') > '; // becomes `:not(a):not(b) > `
// The NodeList of matching elements
var missingCoverageElements = document.querySelectorAll(selector);
// Selecter that finds elements on the page to which we can jump
var selector =
fileListingElements.join(', ') +
', ' +
notSelector +
missingCoverageClasses.join(', ' + notSelector); // becomes `:not(a):not(b) > a, :not(a):not(b) > b`
var currentIndex;
// The NodeList of matching elements
var missingCoverageElements = document.querySelectorAll(selector);
function toggleClass(index) {
missingCoverageElements.item(currentIndex).classList.remove('highlighted');
missingCoverageElements.item(index).classList.add('highlighted');
}
var currentIndex;
function makeCurrent(index) {
toggleClass(index);
currentIndex = index;
missingCoverageElements.item(index)
.scrollIntoView({ behavior: 'smooth', block: 'center', inline: 'center' });
}
function toggleClass(index) {
missingCoverageElements
.item(currentIndex)
.classList.remove('highlighted');
missingCoverageElements.item(index).classList.add('highlighted');
}
function goToPrevious() {
var nextIndex = 0;
if (typeof currentIndex !== 'number' || currentIndex === 0) {
nextIndex = missingCoverageElements.length - 1;
} else if (missingCoverageElements.length > 1) {
nextIndex = currentIndex - 1;
function makeCurrent(index) {
toggleClass(index);
currentIndex = index;
missingCoverageElements.item(index).scrollIntoView({
behavior: 'smooth',
block: 'center',
inline: 'center'
});
}
makeCurrent(nextIndex);
}
function goToPrevious() {
var nextIndex = 0;
if (typeof currentIndex !== 'number' || currentIndex === 0) {
nextIndex = missingCoverageElements.length - 1;
} else if (missingCoverageElements.length > 1) {
nextIndex = currentIndex - 1;
}
function goToNext() {
var nextIndex = 0;
makeCurrent(nextIndex);
}
if (typeof currentIndex === 'number' && currentIndex < (missingCoverageElements.length - 1)) {
nextIndex = currentIndex + 1;
function goToNext() {
var nextIndex = 0;
if (
typeof currentIndex === 'number' &&
currentIndex < missingCoverageElements.length - 1
) {
nextIndex = currentIndex + 1;
}
makeCurrent(nextIndex);
}
makeCurrent(nextIndex);
}
return function jump(event) {
if (
document.getElementById('fileSearch') === document.activeElement &&
document.activeElement != null
) {
// if we're currently focused on the search input, we don't want to navigate
return;
}
return function jump(event) {
switch (event.which) {
case 78: // n
case 74: // j
goToNext();
break;
case 66: // b
case 75: // k
case 80: // p
goToPrevious();
break;
}
};
}());
switch (event.which) {
case 78: // n
case 74: // j
goToNext();
break;
case 66: // b
case 75: // k
case 80: // p
goToPrevious();
break;
}
};
})();
window.addEventListener('keydown', jumpToCode);

@@ -0,1 +1,2 @@

/* eslint-disable */
window.PR_SHOULD_USE_CONTINUATION=true;(function(){var h=["break,continue,do,else,for,if,return,while"];var u=[h,"auto,case,char,const,default,double,enum,extern,float,goto,int,long,register,short,signed,sizeof,static,struct,switch,typedef,union,unsigned,void,volatile"];var p=[u,"catch,class,delete,false,import,new,operator,private,protected,public,this,throw,true,try,typeof"];var l=[p,"alignof,align_union,asm,axiom,bool,concept,concept_map,const_cast,constexpr,decltype,dynamic_cast,explicit,export,friend,inline,late_check,mutable,namespace,nullptr,reinterpret_cast,static_assert,static_cast,template,typeid,typename,using,virtual,where"];var x=[p,"abstract,boolean,byte,extends,final,finally,implements,import,instanceof,null,native,package,strictfp,super,synchronized,throws,transient"];var R=[x,"as,base,by,checked,decimal,delegate,descending,dynamic,event,fixed,foreach,from,group,implicit,in,interface,internal,into,is,lock,object,out,override,orderby,params,partial,readonly,ref,sbyte,sealed,stackalloc,string,select,uint,ulong,unchecked,unsafe,ushort,var"];var r="all,and,by,catch,class,else,extends,false,finally,for,if,in,is,isnt,loop,new,no,not,null,of,off,on,or,return,super,then,true,try,unless,until,when,while,yes";var w=[p,"debugger,eval,export,function,get,null,set,undefined,var,with,Infinity,NaN"];var s="caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END";var I=[h,"and,as,assert,class,def,del,elif,except,exec,finally,from,global,import,in,is,lambda,nonlocal,not,or,pass,print,raise,try,with,yield,False,True,None"];var f=[h,"alias,and,begin,case,class,def,defined,elsif,end,ensure,false,in,module,next,nil,not,or,redo,rescue,retry,self,super,then,true,undef,unless,until,when,yield,BEGIN,END"];var H=[h,"case,done,elif,esac,eval,fi,function,in,local,set,then,until"];var A=[l,R,w,s+I,f,H];var e=/^(DIR|FILE|vector|(de|priority_)?queue|list|stack|(const_)?iterator|(multi)?(set|map)|bitset|u?(int|float)\d*)/;var C="str";var z="kwd";var j="com";var O="typ";var G="lit";var L="pun";var F="pln";var m="tag";var E="dec";var J="src";var P="atn";var n="atv";var N="nocode";var M="(?:^^\\.?|[+-]|\\!|\\!=|\\!==|\\#|\\%|\\%=|&|&&|&&=|&=|\\(|\\*|\\*=|\\+=|\\,|\\-=|\\->|\\/|\\/=|:|::|\\;|<|<<|<<=|<=|=|==|===|>|>=|>>|>>=|>>>|>>>=|\\?|\\@|\\[|\\^|\\^=|\\^\\^|\\^\\^=|\\{|\\||\\|=|\\|\\||\\|\\|=|\\~|break|case|continue|delete|do|else|finally|instanceof|return|throw|try|typeof)\\s*";function k(Z){var ad=0;var S=false;var ac=false;for(var V=0,U=Z.length;V<U;++V){var ae=Z[V];if(ae.ignoreCase){ac=true}else{if(/[a-z]/i.test(ae.source.replace(/\\u[0-9a-f]{4}|\\x[0-9a-f]{2}|\\[^ux]/gi,""))){S=true;ac=false;break}}}var Y={b:8,t:9,n:10,v:11,f:12,r:13};function ab(ah){var ag=ah.charCodeAt(0);if(ag!==92){return ag}var af=ah.charAt(1);ag=Y[af];if(ag){return ag}else{if("0"<=af&&af<="7"){return parseInt(ah.substring(1),8)}else{if(af==="u"||af==="x"){return parseInt(ah.substring(2),16)}else{return ah.charCodeAt(1)}}}}function T(af){if(af<32){return(af<16?"\\x0":"\\x")+af.toString(16)}var ag=String.fromCharCode(af);if(ag==="\\"||ag==="-"||ag==="["||ag==="]"){ag="\\"+ag}return ag}function X(am){var aq=am.substring(1,am.length-1).match(new RegExp("\\\\u[0-9A-Fa-f]{4}|\\\\x[0-9A-Fa-f]{2}|\\\\[0-3][0-7]{0,2}|\\\\[0-7]{1,2}|\\\\[\\s\\S]|-|[^-\\\\]","g"));var ak=[];var af=[];var ao=aq[0]==="^";for(var ar=ao?1:0,aj=aq.length;ar<aj;++ar){var ah=aq[ar];if(/\\[bdsw]/i.test(ah)){ak.push(ah)}else{var ag=ab(ah);var al;if(ar+2<aj&&"-"===aq[ar+1]){al=ab(aq[ar+2]);ar+=2}else{al=ag}af.push([ag,al]);if(!(al<65||ag>122)){if(!(al<65||ag>90)){af.push([Math.max(65,ag)|32,Math.min(al,90)|32])}if(!(al<97||ag>122)){af.push([Math.max(97,ag)&~32,Math.min(al,122)&~32])}}}}af.sort(function(av,au){return(av[0]-au[0])||(au[1]-av[1])});var ai=[];var ap=[NaN,NaN];for(var ar=0;ar<af.length;++ar){var at=af[ar];if(at[0]<=ap[1]+1){ap[1]=Math.max(ap[1],at[1])}else{ai.push(ap=at)}}var an=["["];if(ao){an.push("^")}an.push.apply(an,ak);for(var ar=0;ar<ai.length;++ar){var at=ai[ar];an.push(T(at[0]));if(at[1]>at[0]){if(at[1]+1>at[0]){an.push("-")}an.push(T(at[1]))}}an.push("]");return an.join("")}function W(al){var aj=al.source.match(new RegExp("(?:\\[(?:[^\\x5C\\x5D]|\\\\[\\s\\S])*\\]|\\\\u[A-Fa-f0-9]{4}|\\\\x[A-Fa-f0-9]{2}|\\\\[0-9]+|\\\\[^ux0-9]|\\(\\?[:!=]|[\\(\\)\\^]|[^\\x5B\\x5C\\(\\)\\^]+)","g"));var ah=aj.length;var an=[];for(var ak=0,am=0;ak<ah;++ak){var ag=aj[ak];if(ag==="("){++am}else{if("\\"===ag.charAt(0)){var af=+ag.substring(1);if(af&&af<=am){an[af]=-1}}}}for(var ak=1;ak<an.length;++ak){if(-1===an[ak]){an[ak]=++ad}}for(var ak=0,am=0;ak<ah;++ak){var ag=aj[ak];if(ag==="("){++am;if(an[am]===undefined){aj[ak]="(?:"}}else{if("\\"===ag.charAt(0)){var af=+ag.substring(1);if(af&&af<=am){aj[ak]="\\"+an[am]}}}}for(var ak=0,am=0;ak<ah;++ak){if("^"===aj[ak]&&"^"!==aj[ak+1]){aj[ak]=""}}if(al.ignoreCase&&S){for(var ak=0;ak<ah;++ak){var ag=aj[ak];var ai=ag.charAt(0);if(ag.length>=2&&ai==="["){aj[ak]=X(ag)}else{if(ai!=="\\"){aj[ak]=ag.replace(/[a-zA-Z]/g,function(ao){var ap=ao.charCodeAt(0);return"["+String.fromCharCode(ap&~32,ap|32)+"]"})}}}}return aj.join("")}var aa=[];for(var V=0,U=Z.length;V<U;++V){var ae=Z[V];if(ae.global||ae.multiline){throw new Error(""+ae)}aa.push("(?:"+W(ae)+")")}return new RegExp(aa.join("|"),ac?"gi":"g")}function a(V){var U=/(?:^|\s)nocode(?:\s|$)/;var X=[];var T=0;var Z=[];var W=0;var S;if(V.currentStyle){S=V.currentStyle.whiteSpace}else{if(window.getComputedStyle){S=document.defaultView.getComputedStyle(V,null).getPropertyValue("white-space")}}var Y=S&&"pre"===S.substring(0,3);function aa(ab){switch(ab.nodeType){case 1:if(U.test(ab.className)){return}for(var ae=ab.firstChild;ae;ae=ae.nextSibling){aa(ae)}var ad=ab.nodeName;if("BR"===ad||"LI"===ad){X[W]="\n";Z[W<<1]=T++;Z[(W++<<1)|1]=ab}break;case 3:case 4:var ac=ab.nodeValue;if(ac.length){if(!Y){ac=ac.replace(/[ \t\r\n]+/g," ")}else{ac=ac.replace(/\r\n?/g,"\n")}X[W]=ac;Z[W<<1]=T;T+=ac.length;Z[(W++<<1)|1]=ab}break}}aa(V);return{sourceCode:X.join("").replace(/\n$/,""),spans:Z}}function B(S,U,W,T){if(!U){return}var V={sourceCode:U,basePos:S};W(V);T.push.apply(T,V.decorations)}var v=/\S/;function o(S){var V=undefined;for(var U=S.firstChild;U;U=U.nextSibling){var T=U.nodeType;V=(T===1)?(V?S:U):(T===3)?(v.test(U.nodeValue)?S:V):V}return V===S?undefined:V}function g(U,T){var S={};var V;(function(){var ad=U.concat(T);var ah=[];var ag={};for(var ab=0,Z=ad.length;ab<Z;++ab){var Y=ad[ab];var ac=Y[3];if(ac){for(var ae=ac.length;--ae>=0;){S[ac.charAt(ae)]=Y}}var af=Y[1];var aa=""+af;if(!ag.hasOwnProperty(aa)){ah.push(af);ag[aa]=null}}ah.push(/[\0-\uffff]/);V=k(ah)})();var X=T.length;var W=function(ah){var Z=ah.sourceCode,Y=ah.basePos;var ad=[Y,F];var af=0;var an=Z.match(V)||[];var aj={};for(var ae=0,aq=an.length;ae<aq;++ae){var ag=an[ae];var ap=aj[ag];var ai=void 0;var am;if(typeof ap==="string"){am=false}else{var aa=S[ag.charAt(0)];if(aa){ai=ag.match(aa[1]);ap=aa[0]}else{for(var ao=0;ao<X;++ao){aa=T[ao];ai=ag.match(aa[1]);if(ai){ap=aa[0];break}}if(!ai){ap=F}}am=ap.length>=5&&"lang-"===ap.substring(0,5);if(am&&!(ai&&typeof ai[1]==="string")){am=false;ap=J}if(!am){aj[ag]=ap}}var ab=af;af+=ag.length;if(!am){ad.push(Y+ab,ap)}else{var al=ai[1];var ak=ag.indexOf(al);var ac=ak+al.length;if(ai[2]){ac=ag.length-ai[2].length;ak=ac-al.length}var ar=ap.substring(5);B(Y+ab,ag.substring(0,ak),W,ad);B(Y+ab+ak,al,q(ar,al),ad);B(Y+ab+ac,ag.substring(ac),W,ad)}}ah.decorations=ad};return W}function i(T){var W=[],S=[];if(T.tripleQuotedStrings){W.push([C,/^(?:\'\'\'(?:[^\'\\]|\\[\s\S]|\'{1,2}(?=[^\']))*(?:\'\'\'|$)|\"\"\"(?:[^\"\\]|\\[\s\S]|\"{1,2}(?=[^\"]))*(?:\"\"\"|$)|\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$))/,null,"'\""])}else{if(T.multiLineStrings){W.push([C,/^(?:\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$)|\`(?:[^\\\`]|\\[\s\S])*(?:\`|$))/,null,"'\"`"])}else{W.push([C,/^(?:\'(?:[^\\\'\r\n]|\\.)*(?:\'|$)|\"(?:[^\\\"\r\n]|\\.)*(?:\"|$))/,null,"\"'"])}}if(T.verbatimStrings){S.push([C,/^@\"(?:[^\"]|\"\")*(?:\"|$)/,null])}var Y=T.hashComments;if(Y){if(T.cStyleComments){if(Y>1){W.push([j,/^#(?:##(?:[^#]|#(?!##))*(?:###|$)|.*)/,null,"#"])}else{W.push([j,/^#(?:(?:define|elif|else|endif|error|ifdef|include|ifndef|line|pragma|undef|warning)\b|[^\r\n]*)/,null,"#"])}S.push([C,/^<(?:(?:(?:\.\.\/)*|\/?)(?:[\w-]+(?:\/[\w-]+)+)?[\w-]+\.h|[a-z]\w*)>/,null])}else{W.push([j,/^#[^\r\n]*/,null,"#"])}}if(T.cStyleComments){S.push([j,/^\/\/[^\r\n]*/,null]);S.push([j,/^\/\*[\s\S]*?(?:\*\/|$)/,null])}if(T.regexLiterals){var X=("/(?=[^/*])(?:[^/\\x5B\\x5C]|\\x5C[\\s\\S]|\\x5B(?:[^\\x5C\\x5D]|\\x5C[\\s\\S])*(?:\\x5D|$))+/");S.push(["lang-regex",new RegExp("^"+M+"("+X+")")])}var V=T.types;if(V){S.push([O,V])}var U=(""+T.keywords).replace(/^ | $/g,"");if(U.length){S.push([z,new RegExp("^(?:"+U.replace(/[\s,]+/g,"|")+")\\b"),null])}W.push([F,/^\s+/,null," \r\n\t\xA0"]);S.push([G,/^@[a-z_$][a-z_$@0-9]*/i,null],[O,/^(?:[@_]?[A-Z]+[a-z][A-Za-z_$@0-9]*|\w+_t\b)/,null],[F,/^[a-z_$][a-z_$@0-9]*/i,null],[G,new RegExp("^(?:0x[a-f0-9]+|(?:\\d(?:_\\d+)*\\d*(?:\\.\\d*)?|\\.\\d\\+)(?:e[+\\-]?\\d+)?)[a-z]*","i"),null,"0123456789"],[F,/^\\[\s\S]?/,null],[L,/^.[^\s\w\.$@\'\"\`\/\#\\]*/,null]);return g(W,S)}var K=i({keywords:A,hashComments:true,cStyleComments:true,multiLineStrings:true,regexLiterals:true});function Q(V,ag){var U=/(?:^|\s)nocode(?:\s|$)/;var ab=/\r\n?|\n/;var ac=V.ownerDocument;var S;if(V.currentStyle){S=V.currentStyle.whiteSpace}else{if(window.getComputedStyle){S=ac.defaultView.getComputedStyle(V,null).getPropertyValue("white-space")}}var Z=S&&"pre"===S.substring(0,3);var af=ac.createElement("LI");while(V.firstChild){af.appendChild(V.firstChild)}var W=[af];function ae(al){switch(al.nodeType){case 1:if(U.test(al.className)){break}if("BR"===al.nodeName){ad(al);if(al.parentNode){al.parentNode.removeChild(al)}}else{for(var an=al.firstChild;an;an=an.nextSibling){ae(an)}}break;case 3:case 4:if(Z){var am=al.nodeValue;var aj=am.match(ab);if(aj){var ai=am.substring(0,aj.index);al.nodeValue=ai;var ah=am.substring(aj.index+aj[0].length);if(ah){var ak=al.parentNode;ak.insertBefore(ac.createTextNode(ah),al.nextSibling)}ad(al);if(!ai){al.parentNode.removeChild(al)}}}break}}function ad(ak){while(!ak.nextSibling){ak=ak.parentNode;if(!ak){return}}function ai(al,ar){var aq=ar?al.cloneNode(false):al;var ao=al.parentNode;if(ao){var ap=ai(ao,1);var an=al.nextSibling;ap.appendChild(aq);for(var am=an;am;am=an){an=am.nextSibling;ap.appendChild(am)}}return aq}var ah=ai(ak.nextSibling,0);for(var aj;(aj=ah.parentNode)&&aj.nodeType===1;){ah=aj}W.push(ah)}for(var Y=0;Y<W.length;++Y){ae(W[Y])}if(ag===(ag|0)){W[0].setAttribute("value",ag)}var aa=ac.createElement("OL");aa.className="linenums";var X=Math.max(0,((ag-1))|0)||0;for(var Y=0,T=W.length;Y<T;++Y){af=W[Y];af.className="L"+((Y+X)%10);if(!af.firstChild){af.appendChild(ac.createTextNode("\xA0"))}aa.appendChild(af)}V.appendChild(aa)}function D(ac){var aj=/\bMSIE\b/.test(navigator.userAgent);var am=/\n/g;var al=ac.sourceCode;var an=al.length;var V=0;var aa=ac.spans;var T=aa.length;var ah=0;var X=ac.decorations;var Y=X.length;var Z=0;X[Y]=an;var ar,aq;for(aq=ar=0;aq<Y;){if(X[aq]!==X[aq+2]){X[ar++]=X[aq++];X[ar++]=X[aq++]}else{aq+=2}}Y=ar;for(aq=ar=0;aq<Y;){var at=X[aq];var ab=X[aq+1];var W=aq+2;while(W+2<=Y&&X[W+1]===ab){W+=2}X[ar++]=at;X[ar++]=ab;aq=W}Y=X.length=ar;var ae=null;while(ah<T){var af=aa[ah];var S=aa[ah+2]||an;var ag=X[Z];var ap=X[Z+2]||an;var W=Math.min(S,ap);var ak=aa[ah+1];var U;if(ak.nodeType!==1&&(U=al.substring(V,W))){if(aj){U=U.replace(am,"\r")}ak.nodeValue=U;var ai=ak.ownerDocument;var ao=ai.createElement("SPAN");ao.className=X[Z+1];var ad=ak.parentNode;ad.replaceChild(ao,ak);ao.appendChild(ak);if(V<S){aa[ah+1]=ak=ai.createTextNode(al.substring(W,S));ad.insertBefore(ak,ao.nextSibling)}}V=W;if(V>=S){ah+=2}if(V>=ap){Z+=2}}}var t={};function c(U,V){for(var S=V.length;--S>=0;){var T=V[S];if(!t.hasOwnProperty(T)){t[T]=U}else{if(window.console){console.warn("cannot override language handler %s",T)}}}}function q(T,S){if(!(T&&t.hasOwnProperty(T))){T=/^\s*</.test(S)?"default-markup":"default-code"}return t[T]}c(K,["default-code"]);c(g([],[[F,/^[^<?]+/],[E,/^<!\w[^>]*(?:>|$)/],[j,/^<\!--[\s\S]*?(?:-\->|$)/],["lang-",/^<\?([\s\S]+?)(?:\?>|$)/],["lang-",/^<%([\s\S]+?)(?:%>|$)/],[L,/^(?:<[%?]|[%?]>)/],["lang-",/^<xmp\b[^>]*>([\s\S]+?)<\/xmp\b[^>]*>/i],["lang-js",/^<script\b[^>]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-css",/^<style\b[^>]*>([\s\S]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i]]),["default-markup","htm","html","mxml","xhtml","xml","xsl"]);c(g([[F,/^[\s]+/,null," \t\r\n"],[n,/^(?:\"[^\"]*\"?|\'[^\']*\'?)/,null,"\"'"]],[[m,/^^<\/?[a-z](?:[\w.:-]*\w)?|\/?>$/i],[P,/^(?!style[\s=]|on)[a-z](?:[\w:-]*\w)?/i],["lang-uq.val",/^=\s*([^>\'\"\s]*(?:[^>\'\"\s\/]|\/(?=\s)))/],[L,/^[=<>\/]+/],["lang-js",/^on\w+\s*=\s*\"([^\"]+)\"/i],["lang-js",/^on\w+\s*=\s*\'([^\']+)\'/i],["lang-js",/^on\w+\s*=\s*([^\"\'>\s]+)/i],["lang-css",/^style\s*=\s*\"([^\"]+)\"/i],["lang-css",/^style\s*=\s*\'([^\']+)\'/i],["lang-css",/^style\s*=\s*([^\"\'>\s]+)/i]]),["in.tag"]);c(g([],[[n,/^[\s\S]+/]]),["uq.val"]);c(i({keywords:l,hashComments:true,cStyleComments:true,types:e}),["c","cc","cpp","cxx","cyc","m"]);c(i({keywords:"null,true,false"}),["json"]);c(i({keywords:R,hashComments:true,cStyleComments:true,verbatimStrings:true,types:e}),["cs"]);c(i({keywords:x,cStyleComments:true}),["java"]);c(i({keywords:H,hashComments:true,multiLineStrings:true}),["bsh","csh","sh"]);c(i({keywords:I,hashComments:true,multiLineStrings:true,tripleQuotedStrings:true}),["cv","py"]);c(i({keywords:s,hashComments:true,multiLineStrings:true,regexLiterals:true}),["perl","pl","pm"]);c(i({keywords:f,hashComments:true,multiLineStrings:true,regexLiterals:true}),["rb"]);c(i({keywords:w,cStyleComments:true,regexLiterals:true}),["js"]);c(i({keywords:r,hashComments:3,cStyleComments:true,multilineStrings:true,tripleQuotedStrings:true,regexLiterals:true}),["coffee"]);c(g([],[[C,/^[\s\S]+/]]),["regex"]);function d(V){var U=V.langExtension;try{var S=a(V.sourceNode);var T=S.sourceCode;V.sourceCode=T;V.spans=S.spans;V.basePos=0;q(U,T)(V);D(V)}catch(W){if("console" in window){console.log(W&&W.stack?W.stack:W)}}}function y(W,V,U){var S=document.createElement("PRE");S.innerHTML=W;if(U){Q(S,U)}var T={langExtension:V,numberLines:U,sourceNode:S};d(T);return S.innerHTML}function b(ad){function Y(af){return document.getElementsByTagName(af)}var ac=[Y("pre"),Y("code"),Y("xmp")];var T=[];for(var aa=0;aa<ac.length;++aa){for(var Z=0,V=ac[aa].length;Z<V;++Z){T.push(ac[aa][Z])}}ac=null;var W=Date;if(!W.now){W={now:function(){return +(new Date)}}}var X=0;var S;var ab=/\blang(?:uage)?-([\w.]+)(?!\S)/;var ae=/\bprettyprint\b/;function U(){var ag=(window.PR_SHOULD_USE_CONTINUATION?W.now()+250:Infinity);for(;X<T.length&&W.now()<ag;X++){var aj=T[X];var ai=aj.className;if(ai.indexOf("prettyprint")>=0){var ah=ai.match(ab);var am;if(!ah&&(am=o(aj))&&"CODE"===am.tagName){ah=am.className.match(ab)}if(ah){ah=ah[1]}var al=false;for(var ak=aj.parentNode;ak;ak=ak.parentNode){if((ak.tagName==="pre"||ak.tagName==="code"||ak.tagName==="xmp")&&ak.className&&ak.className.indexOf("prettyprint")>=0){al=true;break}}if(!al){var af=aj.className.match(/\blinenums\b(?::(\d+))?/);af=af?af[1]&&af[1].length?+af[1]:true:false;if(af){Q(aj,af)}S={langExtension:ah,sourceNode:aj,numberLines:af};d(S)}}}if(X<T.length){setTimeout(U,250)}else{if(ad){ad()}}}U()}window.prettyPrintOne=y;window.prettyPrint=b;window.PR={createSimpleLexer:g,registerLangHandler:c,sourceDecorator:i,PR_ATTRIB_NAME:P,PR_ATTRIB_VALUE:n,PR_COMMENT:j,PR_DECLARATION:E,PR_KEYWORD:z,PR_LITERAL:G,PR_NOCODE:N,PR_PLAIN:F,PR_PUNCTUATION:L,PR_SOURCE:J,PR_STRING:C,PR_TAG:m,PR_TYPE:O}})();PR.registerLangHandler(PR.createSimpleLexer([],[[PR.PR_DECLARATION,/^<!\w[^>]*(?:>|$)/],[PR.PR_COMMENT,/^<\!--[\s\S]*?(?:-\->|$)/],[PR.PR_PUNCTUATION,/^(?:<[%?]|[%?]>)/],["lang-",/^<\?([\s\S]+?)(?:\?>|$)/],["lang-",/^<%([\s\S]+?)(?:%>|$)/],["lang-",/^<xmp\b[^>]*>([\s\S]+?)<\/xmp\b[^>]*>/i],["lang-handlebars",/^<script\b[^>]*type\s*=\s*['"]?text\/x-handlebars-template['"]?\b[^>]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-js",/^<script\b[^>]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-css",/^<style\b[^>]*>([\s\S]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i],[PR.PR_DECLARATION,/^{{[#^>/]?\s*[\w.][^}]*}}/],[PR.PR_DECLARATION,/^{{&?\s*[\w.][^}]*}}/],[PR.PR_DECLARATION,/^{{{>?\s*[\w.][^}]*}}}/],[PR.PR_COMMENT,/^{{![^}]*}}/]]),["handlebars","hbs"]);PR.registerLangHandler(PR.createSimpleLexer([[PR.PR_PLAIN,/^[ \t\r\n\f]+/,null," \t\r\n\f"]],[[PR.PR_STRING,/^\"(?:[^\n\r\f\\\"]|\\(?:\r\n?|\n|\f)|\\[\s\S])*\"/,null],[PR.PR_STRING,/^\'(?:[^\n\r\f\\\']|\\(?:\r\n?|\n|\f)|\\[\s\S])*\'/,null],["lang-css-str",/^url\(([^\)\"\']*)\)/i],[PR.PR_KEYWORD,/^(?:url|rgb|\!important|@import|@page|@media|@charset|inherit)(?=[^\-\w]|$)/i,null],["lang-css-kw",/^(-?(?:[_a-z]|(?:\\[0-9a-f]+ ?))(?:[_a-z0-9\-]|\\(?:\\[0-9a-f]+ ?))*)\s*:/i],[PR.PR_COMMENT,/^\/\*[^*]*\*+(?:[^\/*][^*]*\*+)*\//],[PR.PR_COMMENT,/^(?:<!--|-->)/],[PR.PR_LITERAL,/^(?:\d+|\d*\.\d+)(?:%|[a-z]+)?/i],[PR.PR_LITERAL,/^#(?:[0-9a-f]{3}){1,2}/i],[PR.PR_PLAIN,/^-?(?:[_a-z]|(?:\\[\da-f]+ ?))(?:[_a-z\d\-]|\\(?:\\[\da-f]+ ?))*/i],[PR.PR_PUNCTUATION,/^[^\s\w\'\"]+/]]),["css"]);PR.registerLangHandler(PR.createSimpleLexer([],[[PR.PR_KEYWORD,/^-?(?:[_a-z]|(?:\\[\da-f]+ ?))(?:[_a-z\d\-]|\\(?:\\[\da-f]+ ?))*/i]]),["css-kw"]);PR.registerLangHandler(PR.createSimpleLexer([],[[PR.PR_STRING,/^[^\)\"\']+/]]),["css-str"]);

@@ -1,3 +0,4 @@

var addSorting = (function () {
"use strict";
/* eslint-disable */
var addSorting = (function() {
'use strict';
var cols,

@@ -10,10 +11,43 @@ currentSort = {

// returns the summary table element
function getTable() { return document.querySelector('.coverage-summary'); }
function getTable() {
return document.querySelector('.coverage-summary');
}
// returns the thead element of the summary table
function getTableHeader() { return getTable().querySelector('thead tr'); }
function getTableHeader() {
return getTable().querySelector('thead tr');
}
// returns the tbody element of the summary table
function getTableBody() { return getTable().querySelector('tbody'); }
function getTableBody() {
return getTable().querySelector('tbody');
}
// returns the th element for nth column
function getNthColumn(n) { return getTableHeader().querySelectorAll('th')[n]; }
function getNthColumn(n) {
return getTableHeader().querySelectorAll('th')[n];
}
function onFilterInput() {
const searchValue = document.getElementById('fileSearch').value;
const rows = document.getElementsByTagName('tbody')[0].children;
for (let i = 0; i < rows.length; i++) {
const row = rows[i];
if (
row.textContent
.toLowerCase()
.includes(searchValue.toLowerCase())
) {
row.style.display = '';
} else {
row.style.display = 'none';
}
}
}
// loads the search box
function addSearchBox() {
var template = document.getElementById('filterTemplate');
var templateClone = template.content.cloneNode(true);
templateClone.getElementById('fileSearch').oninput = onFilterInput;
template.parentElement.appendChild(templateClone);
}
// loads all columns

@@ -37,3 +71,4 @@ function loadColumns() {

col.defaultDescSort = col.type === 'number';
colNode.innerHTML = colNode.innerHTML + '<span class="sorter"></span>';
colNode.innerHTML =
colNode.innerHTML + '<span class="sorter"></span>';
}

@@ -75,3 +110,3 @@ }

var key = cols[index].key,
sorter = function (a, b) {
sorter = function(a, b) {
a = a.data[key];

@@ -88,3 +123,3 @@ b = b.data[key];

if (desc) {
finalSorter = function (a, b) {
finalSorter = function(a, b) {
return -1 * sorter(a, b);

@@ -115,3 +150,5 @@ };

function addSortIndicators() {
getNthColumn(currentSort.index).className += currentSort.desc ? ' sorted-desc' : ' sorted';
getNthColumn(currentSort.index).className += currentSort.desc
? ' sorted-desc'
: ' sorted';
}

@@ -125,3 +162,3 @@ // adds event listeners for all sorter widgets

return function () {
return function() {
var desc = col.defaultDescSort;

@@ -139,3 +176,3 @@

};
for (i =0 ; i < cols.length; i += 1) {
for (i = 0; i < cols.length; i += 1) {
if (cols[i].sortable) {

@@ -154,3 +191,3 @@ // add the click event handler on the th so users

// adds sorting functionality to the UI
return function () {
return function() {
if (!getTable()) {

@@ -160,3 +197,4 @@ return;

cols = loadColumns();
loadData(cols);
loadData();
addSearchBox();
addSortIndicators();

@@ -163,0 +201,0 @@ enableUI();

# Overview
Express-Cassandra is a Cassandra ORM/ODM/OGM for NodeJS with Elassandra & JanusGraph Support.
Express-Cassandra is a Cassandra ORM/ODM/OGM for NodeJS with support for ScyllaDB, Datastax Enterprise, Elassandra & JanusGraph.
No more hassling with raw cql queries from your nodejs web frameworks. Express-Cassandra automatically loads your models and provides you with object oriented mapping to your cassandra tables like a standard ORM/ODM. Built in support for [Elassandra](http://www.elassandra.io/) and [JanusGraph](http://janusgraph.org/) allows you to automatically manage synced elasticsearch and janusgraph indexes stored in cassandra.
No more hassling with raw cql queries from your nodejs web frameworks. Express-Cassandra automatically loads your models and provides you with object oriented mapping to your cassandra/scylladb tables like a standard ORM/ODM. Built in support for [Cassandra](https://cassandra.apache.org/), [ScyllaDB](https://www.scylladb.com/), [Elassandra](http://www.elassandra.io/) and [JanusGraph](http://janusgraph.org/) allows you to automatically manage schema, graph and data models from your javascript codebase. Models are written as javascript modules and they automatically create the underlying db tables, indexes, materialized views, graphs etc. Afterwards you can save, update, delete and query your data using supported model methods. It's decoupled nature allows you to use it with many popular node frameworks without much hassle.
Express-cassandra enables your nodejs app to manage a highly available distributed data store capable of handling large dataset with powerful query features powered by cassandra, elasticsearch and janusgraph combined. Express-cassandra empowers you to manage and query this truely distributed datastore with search, analytics and graph computing functionality from nodejs like you are just dealing with javascript objects and methods. Models are written as javascript modules and they automatically create the underlying db tables, indexes, materialized views, graphs etc. Afterwards you can save, update, delete and query your data using supported model methods. It's decoupled nature allows you to use it with many popular node frameworks without much hassle.
If you are using elassandra, then saved data in cassandra automatically syncs with elasticsearch indexes defined in your schema. You can then do any query [elasticsearch](https://www.elastic.co/products/elasticsearch) indexes support.

@@ -15,6 +13,6 @@

* supports the latest cassandra 4.x and older stable 3.x releases
* supports the latest cassandra 4.x, 3.x and scylladb 5.x versions
* compatible with datastax enterprise solr search and dse graph
* support for elassandra index management and search queries
* support for janusgraph graph management and tinkerpop3 gremlin queries
* compatible with datastax enterprise solr search and dse graph
* full featured CRUD operations and data type validations

@@ -31,8 +29,4 @@ * full support for collections and other advanced data types

* optional support for query debug and progress logs
* most of the bleeding edge cassandra features are supported
* most of the bleeding edge cassandra and scylladb features are supported
This module internally uses [cassandra-driver](https://github.com/datastax/nodejs-driver).
## Optional Preconfigured Elassandra+JanusGraph
Download the preconfigured [elassandra+janusgraph](https://www.dropbox.com/s/vebuzbdql0w6eap/elassandra_janusgraph_distribution.zip?dl=1) distribution for development convenience. This distribution contains the elassandra and janusgraph versions express-cassandra was tested in and contains mostly configuration changes. This distribution can also be used as a reference configuration for your own environment.
# Installation
For apache cassandra version 4.x, 3.x or datastax enterprise
For apache cassandra 4.x, 3.x, scylladb 5.x or datastax enterprise 6.x, 5.x

@@ -19,2 +19,2 @@ npm install express-cassandra

Please note that if you use the legacy cassandra 2.x compliant version then please use the corresponding README.md file for that version. The following documentation is for version 4.x/3.x and datastax enterprise 6.x/5.x only. The materialized view support and several other part of the documentation is strictly applicable for cassandra 4.x/3.x or dse 6.x/5.x and will not work in earlier versions of cassandra.
Please note that if you use the legacy cassandra 2.x compliant version then please use the corresponding README.md file for that version. The following documentation is for version 4.x, 3.x and datastax enterprise 6.x/5.x only. The materialized view support and several other part of the documentation is strictly applicable for cassandra 4.x/3.x or scylladb 5.x or dse 6.x/5.x and will not work in earlier versions of cassandra.

@@ -74,3 +74,3 @@ 'use strict';

root: CassandraClient.directory,
fileFilter: ['*.js', '*.javascript', '*.jsx', '*.coffee', '*.coffeescript', '*.iced', '*.script', '*.ts', '*.tsx', '*.typescript', '*.cjsx', '*.co', '*.json', '*.json5', '*.litcoffee', '*.liticed', '*.ls', '*.node', '*.toml', '*.wisp']
fileFilter: ['*.js', '*.javascript', '*.jsx', '*.coffee', '*.coffeescript', '*.iced', '*.script', '*.ts', '*.tsx', '*.typescript', '*.cjsx', '*.co', '*.json', '*.json5', '*.litcoffee', '*.liticed', '*.ls', '*.node', '*.toml', '*.wisp', '*.cjs']
});

@@ -372,2 +372,2 @@ }).then(function (fileList) {

module.exports = CassandraClient;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9leHByZXNzQ2Fzc2FuZHJhLmpzIl0sIm5hbWVzIjpbInNlbXZlciIsInJlcXVpcmUiLCJzYXRpc2ZpZXMiLCJwcm9jZXNzIiwidmVyc2lvbiIsIlByb21pc2UiLCJfIiwicGF0aCIsImRzZURyaXZlciIsImUiLCJjcWwiLCJwcm9taXNpZnlBbGwiLCJPUk0iLCJyZWFkZGlycEFzeW5jIiwicHJvbWlzaWZ5IiwiZGVidWciLCJleHBvcnRlciIsImltcG9ydGVyIiwiQ2Fzc2FuZHJhQ2xpZW50IiwiZiIsIm9wdGlvbnMiLCJtb2RlbEluc3RhbmNlIiwib3JtIiwiY2xpZW50T3B0aW9ucyIsIm9ybU9wdGlvbnMiLCJjcmVhdGVDbGllbnQiLCJzZXREaXJlY3RvcnkiLCJkaXJlY3RvcnkiLCJzeW5jTW9kZWxGaWxlVG9EQiIsImZpbGUiLCJjYWxsYmFjayIsIm5hbWUiLCJpbmNsdWRlcyIsIm1vZGVsTmFtZSIsIl90cmFuc2xhdGVGaWxlTmFtZVRvTW9kZWxOYW1lIiwiZmlsZUxvY2F0aW9uIiwiam9pbiIsImRlZmF1bHRNb2RlbFNjaGVtYSIsIm1vZGVsU2NoZW1hIiwiZGVmYXVsdCIsImFkZE1vZGVsIiwidG9Mb3dlckNhc2UiLCJzeW5jREIiLCJiaW5kIiwiY2IiLCJpbml0QXN5bmMiLCJ0aGVuIiwicm9vdCIsImZpbGVGaWx0ZXIiLCJmaWxlTGlzdCIsInN5bmNNb2RlbFRhc2tzIiwic3luY01vZGVsRmlsZVRvREJBc3luYyIsImZpbGVzIiwiZm9yRWFjaCIsInB1c2giLCJhbGwiLCJjYXRjaCIsImVyciIsImlzQXJyYXkiLCJsZW5ndGgiLCJiaW5kQXN5bmMiLCJwcm90b3R5cGUiLCJpbml0IiwiZ2V0VGFibGVMaXN0Iiwic3lzdGVtQ2xpZW50IiwiZ2V0X3N5c3RlbV9jbGllbnQiLCJrZXlzcGFjZSIsImdldF9rZXlzcGFjZV9uYW1lIiwidGFibGVzIiwiY29ubmVjdCIsInN5c3RlbVF1ZXJ5IiwiZXhlY3V0ZSIsInJlc3VsdCIsImkiLCJyb3dzIiwidGFibGVfbmFtZSIsInNodXRkb3duIiwiZ2V0VGFibGVMaXN0QXN5bmMiLCJleHBvcnQiLCJmaXh0dXJlRGlyZWN0b3J5IiwiZWFjaCIsInRhYmxlIiwicHJvY2Vzc1RhYmxlRXhwb3J0IiwiZXhwb3J0QXN5bmMiLCJpbXBvcnQiLCJhcmd1bWVudHMiLCJkZWZhdWx0cyIsImJhdGNoU2l6ZSIsImRlZmF1bHRzRGVlcCIsInByb2Nlc3NUYWJsZUltcG9ydCIsImltcG9ydEFzeW5jIiwibG9hZFNjaGVtYSIsInV1aWQiLCJ0eXBlcyIsIlV1aWQiLCJyYW5kb20iLCJ1dWlkRnJvbVN0cmluZyIsInN0ciIsImZyb21TdHJpbmciLCJ1dWlkRnJvbUJ1ZmZlciIsImJ1ZiIsInRpbWV1dWlkIiwiVGltZVV1aWQiLCJub3ciLCJ0aW1ldXVpZEZyb21EYXRlIiwiZGF0ZSIsImZyb21EYXRlIiwidGltZXV1aWRGcm9tU3RyaW5nIiwidGltZXV1aWRGcm9tQnVmZmVyIiwibWF4VGltZXV1aWQiLCJtYXgiLCJtaW5UaW1ldXVpZCIsIm1pbiIsImRvQmF0Y2giLCJxdWVyaWVzIiwicHJlcGFyZSIsInJhbmRvbU1vZGVsIiwiT2JqZWN0Iiwia2V5cyIsImJlZm9yZUhvb2tzIiwiYmF0Y2hSZXN1bHQiLCJleGVjdXRlX2JhdGNoQXN5bmMiLCJleGVjdXRlX3F1ZXJ5QXN5bmMiLCJxdWVyeSIsInBhcmFtcyIsInJlc3BvbnNlIiwiYWZ0ZXJIb29rUmVzcG9uc2UiLCJhZnRlcl9ob29rIiwiZG9CYXRjaEFzeW5jIiwiY2FsbCIsImZpbGVOYW1lIiwic2xpY2UiLCJsYXN0SW5kZXhPZiIsInJlcGxhY2UiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiY29uc2lzdGVuY2llcyIsImdldCIsImRhdGF0eXBlcyIsImRyaXZlciIsImluc3RhbmNlIiwiY2xvc2UiLCJjbG9zZUFzeW5jIiwibW9kdWxlIiwiZXhwb3J0cyJdLCJtYXBwaW5ncyI6Ijs7QUFBQSxJQUFNQSxTQUFTQyxRQUFRLFFBQVIsQ0FBZjs7QUFFQSxJQUFJLENB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QjJDLFNBQWhCLENBQTBCbUMsY0FBMUIsR0FBMkM5RSxnQkFBZ0I4RSxjQUEzRDtBQUNBOUUsZ0JBQWdCMkMsU0FBaEIsQ0FBMEJzQyxjQUExQixHQUEyQ2pGLGdCQUFnQmlGLGNBQTNEO0FBQ0FqRixnQkFBZ0IyQyxTQUFoQixDQUEwQndDLFFBQTFCLEdBQXFDbkYsZ0JBQWdCbUYsUUFBckQ7QUFDQW5GLGdCQUFnQjJDLFNBQWhCLENBQTBCMkMsZ0JBQTFCLEdBQTZDdEYsZ0JBQWdCc0YsZ0JBQTdEO0FBQ0F0RixnQkFBZ0IyQyxTQUFoQixDQUEwQjhDLGtCQUExQixHQUErQ3pGLGdCQUFnQnlGLGtCQUEvRDtBQUNBekYsZ0JBQWdCMkMsU0FBaEIsQ0FBMEIrQyxrQkFBMUIsR0FBK0MxRixnQkFBZ0IwRixrQkFBL0Q7QUFDQTFGLGdCQUFnQjJDLFNBQWhCLENBQTBCZ0QsV0FBMUIsR0FBd0MzRixnQkFBZ0IyRixXQUF4RDtBQUNBM0YsZ0JBQWdCMkMsU0FBaEIsQ0FBMEJrRCxXQUExQixHQUF3QzdGLGdCQUFnQjZGLFdBQXhEOztBQUVBN0YsZ0JBQWdCMkMsU0FBaEIsQ0FBMEIzQiw2QkFBMUIsR0FBMERoQixnQkFBZ0JnQiw2QkFBMUU7O0FBRUE0RyxPQUFPQyxPQUFQLEdBQWlCN0gsZUFBakIiLCJmaWxlIjoiZXhwcmVzc0Nhc3NhbmRyYS5qcyIsInNvdXJjZXNDb250ZW50IjpbImNvbnN0IHNlbXZlciA9IHJlcXVpcmUoJ3NlbXZlcicpO1xuXG5pZiAoIXNlbXZlci5zYXRpc2ZpZXMocHJvY2Vzcy52ZXJzaW9uLCAnPj02LjAuMCcpKSB7XG4gIHJlcXVpcmUoJ2JhYmVsLXBvbHlmaWxsJyk7XG59XG5cbmNvbnN0IFByb21pc2UgPSByZXF1aXJlKCdibHVlYmlyZCcpO1xuY29uc3QgXyA9IHJlcXVpcmUoJ2xvZGFzaCcpO1xuY29uc3QgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKTtcblxubGV0IGRzZURyaXZlcjtcbnRyeSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tZXh0cmFuZW91cy1kZXBlbmRlbmNpZXMsIGltcG9ydC9uby11bnJlc29sdmVkXG4gIGRzZURyaXZlciA9IHJlcXVpcmUoJ2RzZS1kcml2ZXInKTtcbn0gY2F0Y2ggKGUpIHtcbiAgZHNlRHJpdmVyID0gbnVsbDtcbn1cblxuY29uc3QgY3FsID0gUHJvbWlzZS5wcm9taXNpZnlBbGwoZHNlRHJpdmVyIHx8IHJlcXVpcmUoJ2Nhc3NhbmRyYS1kcml2ZXInKSk7XG5cbmNvbnN0IE9STSA9IFByb21pc2UucHJvbWlzaWZ5QWxsKHJlcXVpcmUoJy4vb3JtL2Fwb2xsbycpKTtcbmNvbnN0IHJlYWRkaXJwQXN5bmMgPSBQcm9taXNlLnByb21pc2lmeShyZXF1aXJlKCdyZWFkZGlycCcpKTtcbmNvbnN0IGRlYnVnID0gcmVxdWlyZSgnZGVidWcnKSgnZXhwcmVzcy1jYXNzYW5kcmEnKTtcblxuY29uc3QgZXhwb3J0ZXIgPSByZXF1aXJlKCcuL3V0aWxzL2V4cG9ydGVyJyk7XG5jb25zdCBpbXBvcnRlciA9IHJlcXVpcmUoJy4vdXRpbHMvaW1wb3J0ZXInKTtcblxuY29uc3QgQ2Fzc2FuZHJhQ2xpZW50ID0gZnVuY3Rpb24gZihvcHRpb25zKSB7XG4gIHRoaXMubW9kZWxJbnN0YW5jZSA9IHt9O1xuICB0aGlzLm9ybSA9IG5ldyBPUk0ob3B0aW9ucy5jbGllbnRPcHRpb25zLCBvcHRpb25zLm9ybU9wdGlvbnMpO1xuICB0aGlzLm9ybSA9IFByb21pc2UucHJvbWlzaWZ5QWxsKHRoaXMub3JtKTtcbn07XG5cbkNhc3NhbmRyYUNsaWVudC5jcmVhdGVDbGllbnQgPSAob3B0aW9ucykgPT4gKG5ldyBDYXNzYW5kcmFDbGllbnQob3B0aW9ucykpO1xuXG5DYXNzYW5kcmFDbGllbnQuc2V0RGlyZWN0b3J5ID0gKGRpcmVjdG9yeSkgPT4ge1xuICBDYXNzYW5kcmFDbGllbnQuZGlyZWN0b3J5ID0gZGlyZWN0b3J5O1xuICByZXR1cm4gQ2Fzc2FuZHJhQ2xpZW50O1xufTtcblxuQ2Fzc2FuZHJhQ2xpZW50LnN5bmNNb2RlbEZpbGVUb0RCID0gKGZpbGUsIGNhbGxiYWNrKSA9PiB7XG4gIGlmICghZmlsZS5uYW1lLmluY2x1ZGVzKCdNb2RlbCcpKSB7XG4gICAgY2FsbGJhY2soKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBtb2RlbE5hbWUgPSBDYXNzYW5kcmFDbGllbnQuX3RyYW5zbGF0ZUZpbGVOYW1lVG9Nb2RlbE5hbWUoZmlsZS5uYW1lKTtcblxuICBpZiAobW9kZWxOYW1lKSB7XG4gICAgY29uc3QgZmlsZUxvY2F0aW9uID0gcGF0aC5qb2luKENhc3NhbmRyYUNsaWVudC5kaXJlY3RvcnksIGZpbGUucGF0aCk7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby1keW5hbWljLXJlcXVpcmVcbiAgICBjb25zdCBkZWZhdWx0TW9kZWxTY2hlbWEgPSByZXF1aXJlKGZpbGVMb2NhdGlvbik7XG4gICAgY29uc3QgbW9kZWxTY2hlbWEgPSBkZWZhdWx0TW9kZWxTY2hlbWEuZGVmYXVsdCA/IGRlZmF1bHRNb2RlbFNjaGVtYS5kZWZhdWx0IDogZGVmYXVsdE1vZGVsU2NoZW1hO1xuICAgIENhc3NhbmRyYUNsaWVudC5tb2RlbEluc3RhbmNlW21vZGVsTmFtZV0gPSBDYXNzYW5kcmFDbGllbnQub3JtLmFkZE1vZGVsKG1vZGVsTmFtZS50b0xvd2VyQ2FzZSgpLCBtb2RlbFNjaGVtYSk7XG4gICAgQ2Fzc2FuZHJhQ2xpZW50Lm1vZGVsSW5zdGFuY2VbbW9kZWxOYW1lXS5zeW5jREIoY2FsbGJhY2spO1xuICAgIENhc3NhbmRyYUNsaWVudC5tb2RlbEluc3RhbmNlW21vZGVsTmFtZV0gPSBQcm9taXNlLnByb21pc2lmeUFsbChDYXNzYW5kcmFDbGllbnQubW9kZWxJbnN0YW5jZVttb2RlbE5hbWVdKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBjYWxsYmFjaygpO1xufTtcblxuQ2Fzc2FuZHJhQ2xpZW50LmJpbmQgPSAob3B0aW9ucywgY2IpID0+IHtcbiAgQ2Fzc2FuZHJhQ2xpZW50Lm1vZGVsSW5zdGFuY2UgPSB7fTtcbiAgQ2Fzc2FuZHJhQ2xpZW50Lm9ybSA9IG5ldyBPUk0ob3B0aW9ucy5jbGllbnRPcHRpb25zLCBvcHRpb25zLm9ybU9wdGlvbnMpO1xuICBDYXNzYW5kcmFDbGllbnQub3JtID0gUHJvbWlzZS5wcm9taXNpZnlBbGwoQ2Fzc2FuZHJhQ2xpZW50Lm9ybSk7XG4gIENhc3NhbmRyYUNsaWVudC5vcm0uaW5pdEFzeW5jKClcbiAgICAudGhlbigoKSA9PiByZWFkZGlycEFzeW5jKHtcbiAgICAgIHJvb3Q6IENhc3NhbmRyYUNsaWVudC5kaXJlY3RvcnksXG4gICAgICBmaWxlRmlsdGVyOiBbXG4gICAgICAgICcqLmpzJywgJyouamF2YXNjcmlwdCcsICcqLmpzeCcsICcqLmNvZmZlZScsICcqLmNvZmZlZXNjcmlwdCcsICcqLmljZWQnLFxuICAgICAgICAnKi5zY3JpcHQnLCAnKi50cycsICcqLnRzeCcsICcqLnR5cGVzY3JpcHQnLCAnKi5janN4JywgJyouY28nLCAnKi5qc29uJyxcbiAgICAgICAgJyouanNvbjUnLCAnKi5saXRjb2ZmZWUnLCAnKi5saXRpY2VkJywgJyoubHMnLCAnKi5ub2RlJywgJyoudG9tbCcsICcqLndpc3AnLFxuICAgICAgXSxcbiAgICB9KSlcbiAgICAudGhlbigoZmlsZUxpc3QpID0+IHtcbiAgICAgIGNvbnN0IHN5bmNNb2RlbFRhc2tzID0gW107XG4gICAgICBjb25zdCBzeW5jTW9kZWxGaWxlVG9EQkFzeW5jID0gUHJvbWlzZS5wcm9taXNpZnkoQ2Fzc2FuZHJhQ2xpZW50LnN5bmNNb2RlbEZpbGVUb0RCKTtcbiAgICAgIGZpbGVMaXN0ID0gZmlsZUxpc3QuZmlsZXM7XG4gICAgICBmaWxlTGlzdC5mb3JFYWNoKChmaWxlKSA9PiB7XG4gICAgICAgIHN5bmNNb2RlbFRhc2tzLnB1c2goc3luY01vZGVsRmlsZVRvREJBc3luYyhmaWxlKSk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBQcm9taXNlLmFsbChzeW5jTW9kZWxUYXNrcyk7XG4gICAgfSlcbiAgICAudGhlbigoKSA9PiB7XG4gICAgICBpZiAoY2IpIGNiKCk7XG4gICAgfSlcbiAgICAuY2F0Y2goKGVycikgPT4ge1xuICAgICAgaWYgKGNiICYmIF8uaXNBcnJheShlcnIpICYmIGVyci5sZW5ndGggPiAwKSBjYihlcnJbMF0pO1xuICAgICAgZWxzZSBpZiAoY2IpIGNiKGVycik7XG4gICAgfSk7XG59O1xuXG5DYXNzYW5kcmFDbGllbnQuYmluZEFzeW5jID0gUHJvbWlzZS5wcm9taXNpZnkoQ2Fzc2FuZHJhQ2xpZW50LmJpbmQpO1xuXG5DYXNzYW5kcmFDbGllbnQucHJvdG90eXBlLmluaXQgPSBmdW5jdGlvbiBmKGNhbGxiYWNrKSB7XG4gIHRoaXMub3JtLmluaXQoY2FsbGJhY2spO1xufTtcblxuQ2Fzc2FuZHJhQ2xpZW50LnByb3RvdHlwZS5pbml0QXN5bmMgPSBQcm9taXNlLnByb21pc2lmeShDYXNzYW5kcmFDbGllbnQucHJvdG90eXBlLmluaXQpO1xuXG5DYXNzYW5kcmFDbGllbnQuZ2V0VGFibGVMaXN0ID0gZnVuY3Rpb24gZihjYWxsYmFjaykge1xuICBjb25zdCBzeXN0ZW1DbGllbnQgPSB0aGlzLm9ybS5nZXRfc3lzdGVtX2NsaWVudCgpO1xuICBjb25zdCBrZXlzcGFjZSA9IHRoaXMub3JtLmdldF9rZXlzcGFjZV9uYW1lKCk7XG4gIGNvbnN0IHRhYmxlcyA9IFtdO1xuXG4gIHN5c3RlbUNsaWVudC5jb25uZWN0KClcbiAgICAudGhlbigoKSA9PiB7XG4gICAgICBjb25zdCBzeXN0ZW1RdWVyeSA9ICdTRUxFQ1QgdGFibGVfbmFtZSBGUk9NIHN5c3RlbV9zY2hlbWEudGFibGVzIFdIRVJFIGtleXNwYWNlX25hbWUgPSA/JztcbiAgICAgIGRlYnVnKGBGaW5kaW5nIHRhYmxlcyBpbiBrZXlzcGFjZTogJHtrZXlzcGFjZX1gKTtcbiAgICAgIHJldHVybiBzeXN0ZW1DbGllbnQuZXhlY3V0ZShzeXN0ZW1RdWVyeSwgW2tleXNwYWNlXSk7XG4gICAgfSlcbiAgICAudGhlbigocmVzdWx0KSA9PiB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlc3VsdC5yb3dzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHRhYmxlcy5wdXNoKHJlc3VsdC5yb3dzW2ldLnRhYmxlX25hbWUpO1xuICAgICAgfVxuICAgIH0pXG4gICAgLnRoZW4oKCkgPT4gc3lzdGVtQ2xpZW50LnNodXRkb3duKCkpXG4gICAgLnRoZW4oKCkgPT4ge1xuICAgICAgY2FsbGJhY2sobnVsbCwgdGFibGVzKTtcbiAgICB9KVxuICAgIC5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICBjYWxsYmFjayhlcnIpO1xuICAgIH0pO1xufTtcblxuQ2Fzc2FuZHJhQ2xpZW50LmdldFRhYmxlTGlzdEFzeW5jID0gUHJvbWlzZS5wcm9taXNpZnkoQ2Fzc2FuZHJhQ2xpZW50LmdldFRhYmxlTGlzdCk7XG5cbkNhc3NhbmRyYUNsaWVudC5leHBvcnQgPSBmdW5jdGlvbiBmKGZpeHR1cmVEaXJlY3RvcnksIGNhbGxiYWNrKSB7XG4gIGNvbnN0IHN5c3RlbUNsaWVudCA9IHRoaXMub3JtLmdldF9zeXN0ZW1fY2xpZW50KCk7XG4gIGNvbnN0IGtleXNwYWNlID0gdGhpcy5vcm0uZ2V0X2tleXNwYWNlX25hbWUoKTtcblxuICBzeXN0ZW1DbGllbnQuY29ubmVjdCgpXG4gICAgLnRoZW4oKCkgPT4gdGhpcy5nZXRUYWJsZUxpc3RBc3luYygpKVxuICAgIC50aGVuKCh0YWJsZXMpID0+XG4gICAgICBQcm9taXNlLmVhY2godGFibGVzLCAodGFibGUpID0+XG4gICAgICAgIGV4cG9ydGVyLnByb2Nlc3NUYWJsZUV4cG9ydChzeXN0ZW1DbGllbnQsIGZpeHR1cmVEaXJlY3RvcnksIGtleXNwYWNlLCB0YWJsZSkpKVxuICAgIC50aGVuKCgpID0+IHN5c3RlbUNsaWVudC5zaHV0ZG93bigpKVxuICAgIC50aGVuKCgpID0+IHtcbiAgICAgIGRlYnVnKCc9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PScpO1xuICAgICAgZGVidWcoYENvbXBsZXRlZCBleHBvcnRpbmcgYWxsIHRhYmxlcyBmcm9tIGtleXNwYWNlOiAke2tleXNwYWNlfWApO1xuICAgICAgY2FsbGJhY2soKTtcbiAgICB9KVxuICAgIC5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICBkZWJ1ZyhlcnIpO1xuICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICB9KTtcbn07XG5cbkNhc3NhbmRyYUNsaWVudC5leHBvcnRBc3luYyA9IFByb21pc2UucHJvbWlzaWZ5KENhc3NhbmRyYUNsaWVudC5leHBvcnQpO1xuXG5DYXNzYW5kcmFDbGllbnQuaW1wb3J0ID0gZnVuY3Rpb24gZihmaXh0dXJlRGlyZWN0b3J5LCBvcHRpb25zLCBjYWxsYmFjaykge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMikge1xuICAgIGNhbGxiYWNrID0gb3B0aW9ucztcbiAgICBvcHRpb25zID0ge307XG4gIH1cblxuICBjb25zdCBkZWZhdWx0cyA9IHtcbiAgICBiYXRjaFNpemU6IDEsXG4gIH07XG5cbiAgb3B0aW9ucyA9IF8uZGVmYXVsdHNEZWVwKHt9LCBvcHRpb25zLCBkZWZhdWx0cyk7XG5cbiAgY29uc3Qgc3lzdGVtQ2xpZW50ID0gdGhpcy5vcm0uZ2V0X3N5c3RlbV9jbGllbnQoKTtcbiAgY29uc3Qga2V5c3BhY2UgPSB0aGlzLm9ybS5nZXRfa2V5c3BhY2VfbmFtZSgpO1xuXG4gIHN5c3RlbUNsaWVudC5jb25uZWN0KClcbiAgICAudGhlbigoKSA9PiB0aGlzLmdldFRhYmxlTGlzdEFzeW5jKCkpXG4gICAgLnRoZW4oKHRhYmxlcykgPT5cbiAgICAgIFByb21pc2UuZWFjaCh0YWJsZXMsICh0YWJsZSkgPT5cbiAgICAgICAgaW1wb3J0ZXIucHJvY2Vzc1RhYmxlSW1wb3J0KHN5c3RlbUNsaWVudCwgZml4dHVyZURpcmVjdG9yeSwga2V5c3BhY2UsIHRhYmxlLCBvcHRpb25zLmJhdGNoU2l6ZSkpKVxuICAgIC50aGVuKCgpID0+IHN5c3RlbUNsaWVudC5zaHV0ZG93bigpKVxuICAgIC50aGVuKCgpID0+IHtcbiAgICAgIGRlYnVnKCc9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PScpO1xuICAgICAgZGVidWcoYENvbXBsZXRlZCBpbXBvcnRpbmcgdG8ga2V5c3BhY2U6ICR7a2V5c3BhY2V9YCk7XG4gICAgICBjYWxsYmFjaygpO1xuICAgIH0pXG4gICAgLmNhdGNoKChlcnIpID0+IHtcbiAgICAgIGRlYnVnKGVycik7XG4gICAgICBjYWxsYmFjayhlcnIpO1xuICAgIH0pO1xufTtcblxuQ2Fzc2FuZHJhQ2xpZW50LmltcG9ydEFzeW5jID0gUHJvbWlzZS5wcm9taXNpZnkoQ2Fzc2FuZHJhQ2xpZW50LmltcG9ydCk7XG5cbkNhc3NhbmRyYUNsaWVudC5wcm90b3R5cGUubG9hZFNjaGVtYSA9IGZ1bmN0aW9uIGYobW9kZWxOYW1lLCBtb2RlbFNjaGVtYSkge1xuICB0aGlzLm1vZGVsSW5zdGFuY2VbbW9kZWxOYW1lXSA9IHRoaXMub3JtLmFkZE1vZGVsKG1vZGVsTmFtZSwgbW9kZWxTY2hlbWEpO1xuICB0aGlzLm1vZGVsSW5zdGFuY2VbbW9kZWxOYW1lXSA9IFByb21pc2UucHJvbWlzaWZ5QWxsKHRoaXMubW9kZWxJbnN0YW5jZVttb2RlbE5hbWVdKTtcbiAgcmV0dXJuIHRoaXMubW9kZWxJbnN0YW5jZVttb2RlbE5hbWVdO1xufTtcblxuQ2Fzc2FuZHJhQ2xpZW50LnV1aWQgPSAoKSA9PiAoY3FsLnR5cGVzLlV1aWQucmFuZG9tKCkpO1xuXG5DYXNzYW5kcmFDbGllbnQudXVpZEZyb21TdHJpbmcgPSAoc3RyKSA9PiAoY3FsLnR5cGVzLlV1aWQuZnJvbVN0cmluZyhzdHIpKTtcblxuQ2Fzc2FuZHJhQ2xpZW50LnV1aWRGcm9tQnVmZmVyID0gKGJ1ZikgPT4gKG5ldyBjcWwudHlwZXMuVXVpZChidWYpKTtcblxuQ2Fzc2FuZHJhQ2xpZW50LnRpbWV1dWlkID0gKCkgPT4gKGNxbC50eXBlcy5UaW1lVXVpZC5ub3coKSk7XG5cbkNhc3NhbmRyYUNsaWVudC50aW1ldXVpZEZyb21EYXRlID0gKGRhdGUpID0+IChjcWwudHlwZXMuVGltZVV1aWQuZnJvbURhdGUoZGF0ZSkpO1xuXG5DYXNzYW5kcmFDbGllbnQudGltZXV1aWRGcm9tU3RyaW5nID0gKHN0cikgPT4gKGNxbC50eXBlcy5UaW1lVXVpZC5mcm9tU3RyaW5nKHN0cikpO1xuXG5DYXNzYW5kcmFDbGllbnQudGltZXV1aWRGcm9tQnVmZmVyID0gKGJ1ZikgPT4gKG5ldyBjcWwudHlwZXMuVGltZVV1aWQoYnVmKSk7XG5cbkNhc3NhbmRyYUNsaWVudC5tYXhUaW1ldXVpZCA9IChkYXRlKSA9PiAoY3FsLnR5cGVzLlRpbWVVdWlkLm1heChkYXRlKSk7XG5cbkNhc3NhbmRyYUNsaWVudC5taW5UaW1ldXVpZCA9IChkYXRlKSA9PiAoY3FsLnR5cGVzLlRpbWVVdWlkLm1pbihkYXRlKSk7XG5cbkNhc3NhbmRyYUNsaWVudC5wcm90b3R5cGUuZG9CYXRjaCA9IGZ1bmN0aW9uIGYocXVlcmllcywgb3B0aW9ucywgY2FsbGJhY2spIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIHtcbiAgICBjYWxsYmFjayA9IG9wdGlvbnM7XG4gICAgb3B0aW9ucyA9IHt9O1xuICB9XG5cbiAgY29uc3QgZGVmYXVsdHMgPSB7XG4gICAgcHJlcGFyZTogdHJ1ZSxcbiAgfTtcblxuICBvcHRpb25zID0gXy5kZWZhdWx0c0RlZXAoe30sIG9wdGlvbnMsIGRlZmF1bHRzKTtcblxuICBjb25zdCByYW5kb21Nb2RlbCA9IHRoaXMubW9kZWxJbnN0YW5jZVtPYmplY3Qua2V5cyh0aGlzLm1vZGVsSW5zdGFuY2UpWzBdXTtcbiAgY29uc3QgYmVmb3JlSG9va3MgPSBbXTtcblxuICBsZXQgYmF0Y2hSZXN1bHQ7XG4gIFByb21pc2UuYWxsKGJlZm9yZUhvb2tzKVxuICAgIC50aGVuKCgpID0+IHtcbiAgICAgIGlmIChxdWVyaWVzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgcmV0dXJuIHJhbmRvbU1vZGVsLmV4ZWN1dGVfYmF0Y2hBc3luYyhxdWVyaWVzLCBvcHRpb25zKTtcbiAgICAgIH1cbiAgICAgIGlmIChxdWVyaWVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgZGVidWcoJ3NpbmdsZSBxdWVyeSBwcm92aWRlZCBmb3IgYmF0Y2ggcmVxdWVzdCwgYXBwbHlpbmcgYXMgbm9uIGJhdGNoIHF1ZXJ5Jyk7XG4gICAgICAgIHJldHVybiByYW5kb21Nb2RlbC5leGVjdXRlX3F1ZXJ5QXN5bmMocXVlcmllc1swXS5xdWVyeSwgcXVlcmllc1swXS5wYXJhbXMsIG9wdGlvbnMpO1xuICAgICAgfVxuICAgICAgZGVidWcoJ25vIHF1ZXJpZXMgcHJvdmlkZWQgZm9yIGJhdGNoIHJlcXVlc3QsIGVtcHR5IGFycmF5IGZvdW5kLCBkb2luZyBub3RoaW5nJyk7XG4gICAgICByZXR1cm4ge307XG4gICAgfSlcbiAgICAudGhlbigocmVzcG9uc2UpID0+IHtcbiAgICAgIGJhdGNoUmVzdWx0ID0gcmVzcG9uc2U7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHF1ZXJpZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgYWZ0ZXJIb29rUmVzcG9uc2UgPSBxdWVyaWVzW2ldLmFmdGVyX2hvb2soKTtcbiAgICAgICAgaWYgKGFmdGVySG9va1Jlc3BvbnNlICE9PSB0cnVlKSB7XG4gICAgICAgICAgY2FsbGJhY2soYWZ0ZXJIb29rUmVzcG9uc2UpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY2FsbGJhY2sobnVsbCwgYmF0Y2hSZXN1bHQpO1xuICAgIH0pXG4gICAgLmNhdGNoKChlcnIpID0+IHtcbiAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgfSk7XG59O1xuXG5DYXNzYW5kcmFDbGllbnQucHJvdG90eXBlLmRvQmF0Y2hBc3luYyA9IFByb21pc2UucHJvbWlzaWZ5KENhc3NhbmRyYUNsaWVudC5wcm90b3R5cGUuZG9CYXRjaCk7XG5cbkNhc3NhbmRyYUNsaWVudC5kb0JhdGNoID0gZnVuY3Rpb24gZihxdWVyaWVzLCBvcHRpb25zLCBjYWxsYmFjaykge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMikge1xuICAgIGNhbGxiYWNrID0gb3B0aW9ucztcbiAgICBvcHRpb25zID0ge307XG4gIH1cblxuICBjb25zdCBkZWZhdWx0cyA9IHtcbiAgICBwcmVwYXJlOiB0cnVlLFxuICB9O1xuXG4gIG9wdGlvbnMgPSBfLmRlZmF1bHRzRGVlcCh7fSwgb3B0aW9ucywgZGVmYXVsdHMpO1xuXG4gIENhc3NhbmRyYUNsaWVudC5wcm90b3R5cGUuZG9CYXRjaC5jYWxsKENhc3NhbmRyYUNsaWVudCwgcXVlcmllcywgb3B0aW9ucywgY2FsbGJhY2spO1xufTtcblxuQ2Fzc2FuZHJhQ2xpZW50LmRvQmF0Y2hBc3luYyA9IFByb21pc2UucHJvbWlzaWZ5KENhc3NhbmRyYUNsaWVudC5kb0JhdGNoKTtcblxuQ2Fzc2FuZHJhQ2xpZW50Ll90cmFuc2xhdGVGaWxlTmFtZVRvTW9kZWxOYW1lID0gKGZpbGVOYW1lKSA9PiAoXG4gIGZpbGVOYW1lLnNsaWNlKDAsIGZpbGVOYW1lLmxhc3RJbmRleE9mKCcuJykpLnJlcGxhY2UoJ01vZGVsJywgJycpXG4pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhDYXNzYW5kcmFDbGllbnQsIHtcbiAgY29uc2lzdGVuY2llczoge1xuICAgIGdldCgpIHtcbiAgICAgIHJldHVybiBjcWwudHlwZXMuY29uc2lzdGVuY2llcztcbiAgICB9LFxuICB9LFxuICBkYXRhdHlwZXM6IHtcbiAgICBnZXQoKSB7XG4gICAgICByZXR1cm4gY3FsLnR5cGVzO1xuICAgIH0sXG4gIH0sXG4gIGRyaXZlcjoge1xuICAgIGdldCgpIHtcbiAgICAgIHJldHVybiBjcWw7XG4gICAgfSxcbiAgfSxcbiAgaW5zdGFuY2U6IHtcbiAgICBnZXQoKSB7XG4gICAgICByZXR1cm4gQ2Fzc2FuZHJhQ2xpZW50Lm1vZGVsSW5zdGFuY2U7XG4gICAgfSxcbiAgfSxcbiAgY2xvc2U6IHtcbiAgICBnZXQoKSB7XG4gICAgICByZXR1cm4gQ2Fzc2FuZHJhQ2xpZW50Lm9ybS5jbG9zZTtcbiAgICB9LFxuICB9LFxuICBjbG9zZUFzeW5jOiB7XG4gICAgZ2V0KCkge1xuICAgICAgcmV0dXJuIFByb21pc2UucHJvbWlzaWZ5KENhc3NhbmRyYUNsaWVudC5vcm0uY2xvc2UpO1xuICAgIH0sXG4gIH0sXG59KTtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhDYXNzYW5kcmFDbGllbnQucHJvdG90eXBlLCB7XG4gIGNvbnNpc3RlbmNpZXM6IHtcbiAgICBnZXQoKSB7XG4gICAgICByZXR1cm4gY3FsLnR5cGVzLmNvbnNpc3RlbmNpZXM7XG4gICAgfSxcbiAgfSxcbiAgZGF0YXR5cGVzOiB7XG4gICAgZ2V0KCkge1xuICAgICAgcmV0dXJuIGNxbC50eXBlcztcbiAgICB9LFxuICB9LFxuICBkcml2ZXI6IHtcbiAgICBnZXQoKSB7XG4gICAgICByZXR1cm4gY3FsO1xuICAgIH0sXG4gIH0sXG4gIGluc3RhbmNlOiB7XG4gICAgZ2V0KCkge1xuICAgICAgcmV0dXJuIHRoaXMubW9kZWxJbnN0YW5jZTtcbiAgICB9LFxuICB9LFxuICBjbG9zZToge1xuICAgIGdldCgpIHtcbiAgICAgIHJldHVybiB0aGlzLm9ybS5jbG9zZTtcbiAgICB9LFxuICB9LFxuICBjbG9zZUFzeW5jOiB7XG4gICAgZ2V0KCkge1xuICAgICAgcmV0dXJuIFByb21pc2UucHJvbWlzaWZ5KHRoaXMub3JtLmNsb3NlKTtcbiAgICB9LFxuICB9LFxufSk7XG5cbkNhc3NhbmRyYUNsaWVudC5wcm90b3R5cGUudXVpZCA9IENhc3NhbmRyYUNsaWVudC51dWlkO1xuQ2Fzc2FuZHJhQ2xpZW50LnByb3RvdHlwZS51dWlkRnJvbVN0cmluZyA9IENhc3NhbmRyYUNsaWVudC51dWlkRnJvbVN0cmluZztcbkNhc3NhbmRyYUNsaWVudC5wcm90b3R5cGUudXVpZEZyb21CdWZmZXIgPSBDYXNzYW5kcmFDbGllbnQudXVpZEZyb21CdWZmZXI7XG5DYXNzYW5kcmFDbGllbnQucHJvdG90eXBlLnRpbWV1dWlkID0gQ2Fzc2FuZHJhQ2xpZW50LnRpbWV1dWlkO1xuQ2Fzc2FuZHJhQ2xpZW50LnByb3RvdHlwZS50aW1ldXVpZEZyb21EYXRlID0gQ2Fzc2FuZHJhQ2xpZW50LnRpbWV1dWlkRnJvbURhdGU7XG5DYXNzYW5kcmFDbGllbnQucHJvdG90eXBlLnRpbWV1dWlkRnJvbVN0cmluZyA9IENhc3NhbmRyYUNsaWVudC50aW1ldXVpZEZyb21TdHJpbmc7XG5DYXNzYW5kcmFDbGllbnQucHJvdG90eXBlLnRpbWV1dWlkRnJvbUJ1ZmZlciA9IENhc3NhbmRyYUNsaWVudC50aW1ldXVpZEZyb21CdWZmZXI7XG5DYXNzYW5kcmFDbGllbnQucHJvdG90eXBlLm1heFRpbWV1dWlkID0gQ2Fzc2FuZHJhQ2xpZW50Lm1heFRpbWV1dWlkO1xuQ2Fzc2FuZHJhQ2xpZW50LnByb3RvdHlwZS5taW5UaW1ldXVpZCA9IENhc3NhbmRyYUNsaWVudC5taW5UaW1ldXVpZDtcblxuQ2Fzc2FuZHJhQ2xpZW50LnByb3RvdHlwZS5fdHJhbnNsYXRlRmlsZU5hbWVUb01vZGVsTmFtZSA9IENhc3NhbmRyYUNsaWVudC5fdHJhbnNsYXRlRmlsZU5hbWVUb01vZGVsTmFtZTtcblxubW9kdWxlLmV4cG9ydHMgPSBDYXNzYW5kcmFDbGllbnQ7XG4iXX0=
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9leHByZXNzQ2Fzc2FuZHJhLmpzIl0sIm5hbWVzIjpbInNlbXZlciIsInJlcXVpcmUiLCJzYXRpc2ZpZXMiLCJwcm9jZXNzIiwidmVyc2lvbiIsIlByb21pc2UiLCJfIiwicGF0aCIsImRzZURyaXZlciIsImUiLCJjcWwiLCJwcm9taXNpZnlBbGwiLCJPUk0iLCJyZWFkZGlycEFzeW5jIiwicHJvbWlzaWZ5IiwiZGVidWciLCJleHBvcnRlciIsImltcG9ydGVyIiwiQ2Fzc2FuZHJhQ2xpZW50IiwiZiIsIm9wdGlvbnMiLCJtb2RlbEluc3RhbmNlIiwib3JtIiwiY2xpZW50T3B0aW9ucyIsIm9ybU9wdGlvbnMiLCJjcmVhdGVDbGllbnQiLCJzZXREaXJlY3RvcnkiLCJkaXJlY3RvcnkiLCJzeW5jTW9kZWxGaWxlVG9EQiIsImZpbGUiLCJjYWxsYmFjayIsIm5hbWUiLCJpbmNsdWRlcyIsIm1vZGVsTmFtZSIsIl90cmFuc2xhdGVGaWxlTmFtZVRvTW9kZWxOYW1lIiwiZmlsZUxvY2F0aW9uIiwiam9pbiIsImRlZmF1bHRNb2RlbFNjaGVtYSIsIm1vZGVsU2NoZW1hIiwiZGVmYXVsdCIsImFkZE1vZGVsIiwidG9Mb3dlckNhc2UiLCJzeW5jREIiLCJiaW5kIiwiY2IiLCJpbml0QXN5bmMiLCJ0aGVuIiwicm9vdCIsImZpbGVGaWx0ZXIiLCJmaWxlTGlzdCIsInN5bmNNb2RlbFRhc2tzIiwic3luY01vZGVsRmlsZVRvREJBc3luYyIsImZpbGVzIiwiZm9yRWFjaCIsInB1c2giLCJhbGwiLCJjYXRjaCIsImVyciIsImlzQXJyYXkiLCJsZW5ndGgiLCJiaW5kQXN5bmMiLCJwcm90b3R5cGUiLCJpbml0IiwiZ2V0VGFibGVMaXN0Iiwic3lzdGVtQ2xpZW50IiwiZ2V0X3N5c3RlbV9jbGllbnQiLCJrZXlzcGFjZSIsImdldF9rZXlzcGFjZV9uYW1lIiwidGFibGVzIiwiY29ubmVjdCIsInN5c3RlbVF1ZXJ5IiwiZXhlY3V0ZSIsInJlc3VsdCIsImkiLCJyb3dzIiwidGFibGVfbmFtZSIsInNodXRkb3duIiwiZ2V0VGFibGVMaXN0QXN5bmMiLCJleHBvcnQiLCJmaXh0dXJlRGlyZWN0b3J5IiwiZWFjaCIsInRhYmxlIiwicHJvY2Vzc1RhYmxlRXhwb3J0IiwiZXhwb3J0QXN5bmMiLCJpbXBvcnQiLCJhcmd1bWVudHMiLCJkZWZhdWx0cyIsImJhdGNoU2l6ZSIsImRlZmF1bHRzRGVlcCIsInByb2Nlc3NUYWJsZUltcG9ydCIsImltcG9ydEFzeW5jIiwibG9hZFNjaGVtYSIsInV1aWQiLCJ0eXBlcyIsIlV1aWQiLCJyYW5kb20iLCJ1dWlkRnJvbVN0cmluZyIsInN0ciIsImZyb21TdHJpbmciLCJ1dWlkRnJvbUJ1ZmZlciIsImJ1ZiIsInRpbWV1dWlkIiwiVGltZVV1aWQiLCJub3ciLCJ0aW1ldXVpZEZyb21EYXRlIiwiZGF0ZSIsImZyb21EYXRlIiwidGltZXV1aWRGcm9tU3RyaW5nIiwidGltZXV1aWRGcm9tQnVmZmVyIiwibWF4VGltZXV1aWQiLCJtYXgiLCJtaW5UaW1ldXVpZCIsIm1pbiIsImRvQmF0Y2giLCJxdWVyaWVzIiwicHJlcGFyZSIsInJhbmRvbU1vZGVsIiwiT2JqZWN0Iiwia2V5cyIsImJlZm9yZUhvb2tzIiwiYmF0Y2hSZXN1bHQiLCJleGVjdXRlX2JhdGNoQXN5bmMiLCJleGVjdXRlX3F1ZXJ5QXN5bmMiLCJxdWVyeSIsInBhcmFtcyIsInJlc3BvbnNlIiwiYWZ0ZXJIb29rUmVzcG9uc2UiLCJhZnRlcl9ob29rIiwiZG9CYXRjaEFzeW5jIiwiY2FsbCIsImZpbGVOYW1lIiwic2xpY2UiLCJsYXN0SW5kZXhPZiIsInJlcGxhY2UiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiY29uc2lzdGVuY2llcyIsImdldCIsImRhdGF0eXBlcyIsImRyaXZlciIsImluc3RhbmNlIiwiY2xvc2UiLCJjbG9zZUFzeW5jIiwibW9kdWxlIiwiZXhwb3J0cyJdLCJtYXBwaW5ncyI6Ijs7QUFBQSxJQUFNQSxTQUFTQyxRQUFRLFFBQVIsQ0FBZjs7QUFFQSxJQUFJLENB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MUUsZ0JBQWdCMkMsU0FBaEIsQ0FBMEJtQyxjQUExQixHQUEyQzlFLGdCQUFnQjhFLGNBQTNEO0FBQ0E5RSxnQkFBZ0IyQyxTQUFoQixDQUEwQnNDLGNBQTFCLEdBQTJDakYsZ0JBQWdCaUYsY0FBM0Q7QUFDQWpGLGdCQUFnQjJDLFNBQWhCLENBQTBCd0MsUUFBMUIsR0FBcUNuRixnQkFBZ0JtRixRQUFyRDtBQUNBbkYsZ0JBQWdCMkMsU0FBaEIsQ0FBMEIyQyxnQkFBMUIsR0FBNkN0RixnQkFBZ0JzRixnQkFBN0Q7QUFDQXRGLGdCQUFnQjJDLFNBQWhCLENBQTBCOEMsa0JBQTFCLEdBQStDekYsZ0JBQWdCeUYsa0JBQS9EO0FBQ0F6RixnQkFBZ0IyQyxTQUFoQixDQUEwQitDLGtCQUExQixHQUErQzFGLGdCQUFnQjBGLGtCQUEvRDtBQUNBMUYsZ0JBQWdCMkMsU0FBaEIsQ0FBMEJnRCxXQUExQixHQUF3QzNGLGdCQUFnQjJGLFdBQXhEO0FBQ0EzRixnQkFBZ0IyQyxTQUFoQixDQUEwQmtELFdBQTFCLEdBQXdDN0YsZ0JBQWdCNkYsV0FBeEQ7O0FBRUE3RixnQkFBZ0IyQyxTQUFoQixDQUEwQjNCLDZCQUExQixHQUEwRGhCLGdCQUFnQmdCLDZCQUExRTs7QUFFQTRHLE9BQU9DLE9BQVAsR0FBaUI3SCxlQUFqQiIsImZpbGUiOiJleHByZXNzQ2Fzc2FuZHJhLmpzIiwic291cmNlc0NvbnRlbnQiOlsiY29uc3Qgc2VtdmVyID0gcmVxdWlyZSgnc2VtdmVyJyk7XG5cbmlmICghc2VtdmVyLnNhdGlzZmllcyhwcm9jZXNzLnZlcnNpb24sICc+PTYuMC4wJykpIHtcbiAgcmVxdWlyZSgnYmFiZWwtcG9seWZpbGwnKTtcbn1cblxuY29uc3QgUHJvbWlzZSA9IHJlcXVpcmUoJ2JsdWViaXJkJyk7XG5jb25zdCBfID0gcmVxdWlyZSgnbG9kYXNoJyk7XG5jb25zdCBwYXRoID0gcmVxdWlyZSgncGF0aCcpO1xuXG5sZXQgZHNlRHJpdmVyO1xudHJ5IHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby1leHRyYW5lb3VzLWRlcGVuZGVuY2llcywgaW1wb3J0L25vLXVucmVzb2x2ZWRcbiAgZHNlRHJpdmVyID0gcmVxdWlyZSgnZHNlLWRyaXZlcicpO1xufSBjYXRjaCAoZSkge1xuICBkc2VEcml2ZXIgPSBudWxsO1xufVxuXG5jb25zdCBjcWwgPSBQcm9taXNlLnByb21pc2lmeUFsbChkc2VEcml2ZXIgfHwgcmVxdWlyZSgnY2Fzc2FuZHJhLWRyaXZlcicpKTtcblxuY29uc3QgT1JNID0gUHJvbWlzZS5wcm9taXNpZnlBbGwocmVxdWlyZSgnLi9vcm0vYXBvbGxvJykpO1xuY29uc3QgcmVhZGRpcnBBc3luYyA9IFByb21pc2UucHJvbWlzaWZ5KHJlcXVpcmUoJ3JlYWRkaXJwJykpO1xuY29uc3QgZGVidWcgPSByZXF1aXJlKCdkZWJ1ZycpKCdleHByZXNzLWNhc3NhbmRyYScpO1xuXG5jb25zdCBleHBvcnRlciA9IHJlcXVpcmUoJy4vdXRpbHMvZXhwb3J0ZXInKTtcbmNvbnN0IGltcG9ydGVyID0gcmVxdWlyZSgnLi91dGlscy9pbXBvcnRlcicpO1xuXG5jb25zdCBDYXNzYW5kcmFDbGllbnQgPSBmdW5jdGlvbiBmKG9wdGlvbnMpIHtcbiAgdGhpcy5tb2RlbEluc3RhbmNlID0ge307XG4gIHRoaXMub3JtID0gbmV3IE9STShvcHRpb25zLmNsaWVudE9wdGlvbnMsIG9wdGlvbnMub3JtT3B0aW9ucyk7XG4gIHRoaXMub3JtID0gUHJvbWlzZS5wcm9taXNpZnlBbGwodGhpcy5vcm0pO1xufTtcblxuQ2Fzc2FuZHJhQ2xpZW50LmNyZWF0ZUNsaWVudCA9IChvcHRpb25zKSA9PiAobmV3IENhc3NhbmRyYUNsaWVudChvcHRpb25zKSk7XG5cbkNhc3NhbmRyYUNsaWVudC5zZXREaXJlY3RvcnkgPSAoZGlyZWN0b3J5KSA9PiB7XG4gIENhc3NhbmRyYUNsaWVudC5kaXJlY3RvcnkgPSBkaXJlY3Rvcnk7XG4gIHJldHVybiBDYXNzYW5kcmFDbGllbnQ7XG59O1xuXG5DYXNzYW5kcmFDbGllbnQuc3luY01vZGVsRmlsZVRvREIgPSAoZmlsZSwgY2FsbGJhY2spID0+IHtcbiAgaWYgKCFmaWxlLm5hbWUuaW5jbHVkZXMoJ01vZGVsJykpIHtcbiAgICBjYWxsYmFjaygpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IG1vZGVsTmFtZSA9IENhc3NhbmRyYUNsaWVudC5fdHJhbnNsYXRlRmlsZU5hbWVUb01vZGVsTmFtZShmaWxlLm5hbWUpO1xuXG4gIGlmIChtb2RlbE5hbWUpIHtcbiAgICBjb25zdCBmaWxlTG9jYXRpb24gPSBwYXRoLmpvaW4oQ2Fzc2FuZHJhQ2xpZW50LmRpcmVjdG9yeSwgZmlsZS5wYXRoKTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLWR5bmFtaWMtcmVxdWlyZVxuICAgIGNvbnN0IGRlZmF1bHRNb2RlbFNjaGVtYSA9IHJlcXVpcmUoZmlsZUxvY2F0aW9uKTtcbiAgICBjb25zdCBtb2RlbFNjaGVtYSA9IGRlZmF1bHRNb2RlbFNjaGVtYS5kZWZhdWx0ID8gZGVmYXVsdE1vZGVsU2NoZW1hLmRlZmF1bHQgOiBkZWZhdWx0TW9kZWxTY2hlbWE7XG4gICAgQ2Fzc2FuZHJhQ2xpZW50Lm1vZGVsSW5zdGFuY2VbbW9kZWxOYW1lXSA9IENhc3NhbmRyYUNsaWVudC5vcm0uYWRkTW9kZWwobW9kZWxOYW1lLnRvTG93ZXJDYXNlKCksIG1vZGVsU2NoZW1hKTtcbiAgICBDYXNzYW5kcmFDbGllbnQubW9kZWxJbnN0YW5jZVttb2RlbE5hbWVdLnN5bmNEQihjYWxsYmFjayk7XG4gICAgQ2Fzc2FuZHJhQ2xpZW50Lm1vZGVsSW5zdGFuY2VbbW9kZWxOYW1lXSA9IFByb21pc2UucHJvbWlzaWZ5QWxsKENhc3NhbmRyYUNsaWVudC5tb2RlbEluc3RhbmNlW21vZGVsTmFtZV0pO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNhbGxiYWNrKCk7XG59O1xuXG5DYXNzYW5kcmFDbGllbnQuYmluZCA9IChvcHRpb25zLCBjYikgPT4ge1xuICBDYXNzYW5kcmFDbGllbnQubW9kZWxJbnN0YW5jZSA9IHt9O1xuICBDYXNzYW5kcmFDbGllbnQub3JtID0gbmV3IE9STShvcHRpb25zLmNsaWVudE9wdGlvbnMsIG9wdGlvbnMub3JtT3B0aW9ucyk7XG4gIENhc3NhbmRyYUNsaWVudC5vcm0gPSBQcm9taXNlLnByb21pc2lmeUFsbChDYXNzYW5kcmFDbGllbnQub3JtKTtcbiAgQ2Fzc2FuZHJhQ2xpZW50Lm9ybS5pbml0QXN5bmMoKVxuICAgIC50aGVuKCgpID0+IHJlYWRkaXJwQXN5bmMoe1xuICAgICAgcm9vdDogQ2Fzc2FuZHJhQ2xpZW50LmRpcmVjdG9yeSxcbiAgICAgIGZpbGVGaWx0ZXI6IFtcbiAgICAgICAgJyouanMnLCAnKi5qYXZhc2NyaXB0JywgJyouanN4JywgJyouY29mZmVlJywgJyouY29mZmVlc2NyaXB0JywgJyouaWNlZCcsXG4gICAgICAgICcqLnNjcmlwdCcsICcqLnRzJywgJyoudHN4JywgJyoudHlwZXNjcmlwdCcsICcqLmNqc3gnLCAnKi5jbycsICcqLmpzb24nLFxuICAgICAgICAnKi5qc29uNScsICcqLmxpdGNvZmZlZScsICcqLmxpdGljZWQnLCAnKi5scycsICcqLm5vZGUnLCAnKi50b21sJyxcbiAgICAgICAgJyoud2lzcCcsICcqLmNqcycsXG4gICAgICBdLFxuICAgIH0pKVxuICAgIC50aGVuKChmaWxlTGlzdCkgPT4ge1xuICAgICAgY29uc3Qgc3luY01vZGVsVGFza3MgPSBbXTtcbiAgICAgIGNvbnN0IHN5bmNNb2RlbEZpbGVUb0RCQXN5bmMgPSBQcm9taXNlLnByb21pc2lmeShDYXNzYW5kcmFDbGllbnQuc3luY01vZGVsRmlsZVRvREIpO1xuICAgICAgZmlsZUxpc3QgPSBmaWxlTGlzdC5maWxlcztcbiAgICAgIGZpbGVMaXN0LmZvckVhY2goKGZpbGUpID0+IHtcbiAgICAgICAgc3luY01vZGVsVGFza3MucHVzaChzeW5jTW9kZWxGaWxlVG9EQkFzeW5jKGZpbGUpKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIFByb21pc2UuYWxsKHN5bmNNb2RlbFRhc2tzKTtcbiAgICB9KVxuICAgIC50aGVuKCgpID0+IHtcbiAgICAgIGlmIChjYikgY2IoKTtcbiAgICB9KVxuICAgIC5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICBpZiAoY2IgJiYgXy5pc0FycmF5KGVycikgJiYgZXJyLmxlbmd0aCA+IDApIGNiKGVyclswXSk7XG4gICAgICBlbHNlIGlmIChjYikgY2IoZXJyKTtcbiAgICB9KTtcbn07XG5cbkNhc3NhbmRyYUNsaWVudC5iaW5kQXN5bmMgPSBQcm9taXNlLnByb21pc2lmeShDYXNzYW5kcmFDbGllbnQuYmluZCk7XG5cbkNhc3NhbmRyYUNsaWVudC5wcm90b3R5cGUuaW5pdCA9IGZ1bmN0aW9uIGYoY2FsbGJhY2spIHtcbiAgdGhpcy5vcm0uaW5pdChjYWxsYmFjayk7XG59O1xuXG5DYXNzYW5kcmFDbGllbnQucHJvdG90eXBlLmluaXRBc3luYyA9IFByb21pc2UucHJvbWlzaWZ5KENhc3NhbmRyYUNsaWVudC5wcm90b3R5cGUuaW5pdCk7XG5cbkNhc3NhbmRyYUNsaWVudC5nZXRUYWJsZUxpc3QgPSBmdW5jdGlvbiBmKGNhbGxiYWNrKSB7XG4gIGNvbnN0IHN5c3RlbUNsaWVudCA9IHRoaXMub3JtLmdldF9zeXN0ZW1fY2xpZW50KCk7XG4gIGNvbnN0IGtleXNwYWNlID0gdGhpcy5vcm0uZ2V0X2tleXNwYWNlX25hbWUoKTtcbiAgY29uc3QgdGFibGVzID0gW107XG5cbiAgc3lzdGVtQ2xpZW50LmNvbm5lY3QoKVxuICAgIC50aGVuKCgpID0+IHtcbiAgICAgIGNvbnN0IHN5c3RlbVF1ZXJ5ID0gJ1NFTEVDVCB0YWJsZV9uYW1lIEZST00gc3lzdGVtX3NjaGVtYS50YWJsZXMgV0hFUkUga2V5c3BhY2VfbmFtZSA9ID8nO1xuICAgICAgZGVidWcoYEZpbmRpbmcgdGFibGVzIGluIGtleXNwYWNlOiAke2tleXNwYWNlfWApO1xuICAgICAgcmV0dXJuIHN5c3RlbUNsaWVudC5leGVjdXRlKHN5c3RlbVF1ZXJ5LCBba2V5c3BhY2VdKTtcbiAgICB9KVxuICAgIC50aGVuKChyZXN1bHQpID0+IHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmVzdWx0LnJvd3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdGFibGVzLnB1c2gocmVzdWx0LnJvd3NbaV0udGFibGVfbmFtZSk7XG4gICAgICB9XG4gICAgfSlcbiAgICAudGhlbigoKSA9PiBzeXN0ZW1DbGllbnQuc2h1dGRvd24oKSlcbiAgICAudGhlbigoKSA9PiB7XG4gICAgICBjYWxsYmFjayhudWxsLCB0YWJsZXMpO1xuICAgIH0pXG4gICAgLmNhdGNoKChlcnIpID0+IHtcbiAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgfSk7XG59O1xuXG5DYXNzYW5kcmFDbGllbnQuZ2V0VGFibGVMaXN0QXN5bmMgPSBQcm9taXNlLnByb21pc2lmeShDYXNzYW5kcmFDbGllbnQuZ2V0VGFibGVMaXN0KTtcblxuQ2Fzc2FuZHJhQ2xpZW50LmV4cG9ydCA9IGZ1bmN0aW9uIGYoZml4dHVyZURpcmVjdG9yeSwgY2FsbGJhY2spIHtcbiAgY29uc3Qgc3lzdGVtQ2xpZW50ID0gdGhpcy5vcm0uZ2V0X3N5c3RlbV9jbGllbnQoKTtcbiAgY29uc3Qga2V5c3BhY2UgPSB0aGlzLm9ybS5nZXRfa2V5c3BhY2VfbmFtZSgpO1xuXG4gIHN5c3RlbUNsaWVudC5jb25uZWN0KClcbiAgICAudGhlbigoKSA9PiB0aGlzLmdldFRhYmxlTGlzdEFzeW5jKCkpXG4gICAgLnRoZW4oKHRhYmxlcykgPT4gUHJvbWlzZS5lYWNoKHRhYmxlcywgKHRhYmxlKSA9PiBleHBvcnRlci5wcm9jZXNzVGFibGVFeHBvcnQoXG4gICAgICBzeXN0ZW1DbGllbnQsXG4gICAgICBmaXh0dXJlRGlyZWN0b3J5LFxuICAgICAga2V5c3BhY2UsXG4gICAgICB0YWJsZSxcbiAgICApKSlcbiAgICAudGhlbigoKSA9PiBzeXN0ZW1DbGllbnQuc2h1dGRvd24oKSlcbiAgICAudGhlbigoKSA9PiB7XG4gICAgICBkZWJ1ZygnPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0nKTtcbiAgICAgIGRlYnVnKGBDb21wbGV0ZWQgZXhwb3J0aW5nIGFsbCB0YWJsZXMgZnJvbSBrZXlzcGFjZTogJHtrZXlzcGFjZX1gKTtcbiAgICAgIGNhbGxiYWNrKCk7XG4gICAgfSlcbiAgICAuY2F0Y2goKGVycikgPT4ge1xuICAgICAgZGVidWcoZXJyKTtcbiAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgfSk7XG59O1xuXG5DYXNzYW5kcmFDbGllbnQuZXhwb3J0QXN5bmMgPSBQcm9taXNlLnByb21pc2lmeShDYXNzYW5kcmFDbGllbnQuZXhwb3J0KTtcblxuQ2Fzc2FuZHJhQ2xpZW50LmltcG9ydCA9IGZ1bmN0aW9uIGYoZml4dHVyZURpcmVjdG9yeSwgb3B0aW9ucywgY2FsbGJhY2spIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIHtcbiAgICBjYWxsYmFjayA9IG9wdGlvbnM7XG4gICAgb3B0aW9ucyA9IHt9O1xuICB9XG5cbiAgY29uc3QgZGVmYXVsdHMgPSB7XG4gICAgYmF0Y2hTaXplOiAxLFxuICB9O1xuXG4gIG9wdGlvbnMgPSBfLmRlZmF1bHRzRGVlcCh7fSwgb3B0aW9ucywgZGVmYXVsdHMpO1xuXG4gIGNvbnN0IHN5c3RlbUNsaWVudCA9IHRoaXMub3JtLmdldF9zeXN0ZW1fY2xpZW50KCk7XG4gIGNvbnN0IGtleXNwYWNlID0gdGhpcy5vcm0uZ2V0X2tleXNwYWNlX25hbWUoKTtcblxuICBzeXN0ZW1DbGllbnQuY29ubmVjdCgpXG4gICAgLnRoZW4oKCkgPT4gdGhpcy5nZXRUYWJsZUxpc3RBc3luYygpKVxuICAgIC50aGVuKCh0YWJsZXMpID0+IFByb21pc2UuZWFjaCh0YWJsZXMsICh0YWJsZSkgPT4gaW1wb3J0ZXIucHJvY2Vzc1RhYmxlSW1wb3J0KFxuICAgICAgc3lzdGVtQ2xpZW50LFxuICAgICAgZml4dHVyZURpcmVjdG9yeSxcbiAgICAgIGtleXNwYWNlLFxuICAgICAgdGFibGUsXG4gICAgICBvcHRpb25zLmJhdGNoU2l6ZSxcbiAgICApKSlcbiAgICAudGhlbigoKSA9PiBzeXN0ZW1DbGllbnQuc2h1dGRvd24oKSlcbiAgICAudGhlbigoKSA9PiB7XG4gICAgICBkZWJ1ZygnPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0nKTtcbiAgICAgIGRlYnVnKGBDb21wbGV0ZWQgaW1wb3J0aW5nIHRvIGtleXNwYWNlOiAke2tleXNwYWNlfWApO1xuICAgICAgY2FsbGJhY2soKTtcbiAgICB9KVxuICAgIC5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICBkZWJ1ZyhlcnIpO1xuICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICB9KTtcbn07XG5cbkNhc3NhbmRyYUNsaWVudC5pbXBvcnRBc3luYyA9IFByb21pc2UucHJvbWlzaWZ5KENhc3NhbmRyYUNsaWVudC5pbXBvcnQpO1xuXG5DYXNzYW5kcmFDbGllbnQucHJvdG90eXBlLmxvYWRTY2hlbWEgPSBmdW5jdGlvbiBmKG1vZGVsTmFtZSwgbW9kZWxTY2hlbWEpIHtcbiAgdGhpcy5tb2RlbEluc3RhbmNlW21vZGVsTmFtZV0gPSB0aGlzLm9ybS5hZGRNb2RlbChtb2RlbE5hbWUsIG1vZGVsU2NoZW1hKTtcbiAgdGhpcy5tb2RlbEluc3RhbmNlW21vZGVsTmFtZV0gPSBQcm9taXNlLnByb21pc2lmeUFsbCh0aGlzLm1vZGVsSW5zdGFuY2VbbW9kZWxOYW1lXSk7XG4gIHJldHVybiB0aGlzLm1vZGVsSW5zdGFuY2VbbW9kZWxOYW1lXTtcbn07XG5cbkNhc3NhbmRyYUNsaWVudC51dWlkID0gKCkgPT4gKGNxbC50eXBlcy5VdWlkLnJhbmRvbSgpKTtcblxuQ2Fzc2FuZHJhQ2xpZW50LnV1aWRGcm9tU3RyaW5nID0gKHN0cikgPT4gKGNxbC50eXBlcy5VdWlkLmZyb21TdHJpbmcoc3RyKSk7XG5cbkNhc3NhbmRyYUNsaWVudC51dWlkRnJvbUJ1ZmZlciA9IChidWYpID0+IChuZXcgY3FsLnR5cGVzLlV1aWQoYnVmKSk7XG5cbkNhc3NhbmRyYUNsaWVudC50aW1ldXVpZCA9ICgpID0+IChjcWwudHlwZXMuVGltZVV1aWQubm93KCkpO1xuXG5DYXNzYW5kcmFDbGllbnQudGltZXV1aWRGcm9tRGF0ZSA9IChkYXRlKSA9PiAoY3FsLnR5cGVzLlRpbWVVdWlkLmZyb21EYXRlKGRhdGUpKTtcblxuQ2Fzc2FuZHJhQ2xpZW50LnRpbWV1dWlkRnJvbVN0cmluZyA9IChzdHIpID0+IChjcWwudHlwZXMuVGltZVV1aWQuZnJvbVN0cmluZyhzdHIpKTtcblxuQ2Fzc2FuZHJhQ2xpZW50LnRpbWV1dWlkRnJvbUJ1ZmZlciA9IChidWYpID0+IChuZXcgY3FsLnR5cGVzLlRpbWVVdWlkKGJ1ZikpO1xuXG5DYXNzYW5kcmFDbGllbnQubWF4VGltZXV1aWQgPSAoZGF0ZSkgPT4gKGNxbC50eXBlcy5UaW1lVXVpZC5tYXgoZGF0ZSkpO1xuXG5DYXNzYW5kcmFDbGllbnQubWluVGltZXV1aWQgPSAoZGF0ZSkgPT4gKGNxbC50eXBlcy5UaW1lVXVpZC5taW4oZGF0ZSkpO1xuXG5DYXNzYW5kcmFDbGllbnQucHJvdG90eXBlLmRvQmF0Y2ggPSBmdW5jdGlvbiBmKHF1ZXJpZXMsIG9wdGlvbnMsIGNhbGxiYWNrKSB7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAyKSB7XG4gICAgY2FsbGJhY2sgPSBvcHRpb25zO1xuICAgIG9wdGlvbnMgPSB7fTtcbiAgfVxuXG4gIGNvbnN0IGRlZmF1bHRzID0ge1xuICAgIHByZXBhcmU6IHRydWUsXG4gIH07XG5cbiAgb3B0aW9ucyA9IF8uZGVmYXVsdHNEZWVwKHt9LCBvcHRpb25zLCBkZWZhdWx0cyk7XG5cbiAgY29uc3QgcmFuZG9tTW9kZWwgPSB0aGlzLm1vZGVsSW5zdGFuY2VbT2JqZWN0LmtleXModGhpcy5tb2RlbEluc3RhbmNlKVswXV07XG4gIGNvbnN0IGJlZm9yZUhvb2tzID0gW107XG5cbiAgbGV0IGJhdGNoUmVzdWx0O1xuICBQcm9taXNlLmFsbChiZWZvcmVIb29rcylcbiAgICAudGhlbigoKSA9PiB7XG4gICAgICBpZiAocXVlcmllcy5sZW5ndGggPiAxKSB7XG4gICAgICAgIHJldHVybiByYW5kb21Nb2RlbC5leGVjdXRlX2JhdGNoQXN5bmMocXVlcmllcywgb3B0aW9ucyk7XG4gICAgICB9XG4gICAgICBpZiAocXVlcmllcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGRlYnVnKCdzaW5nbGUgcXVlcnkgcHJvdmlkZWQgZm9yIGJhdGNoIHJlcXVlc3QsIGFwcGx5aW5nIGFzIG5vbiBiYXRjaCBxdWVyeScpO1xuICAgICAgICByZXR1cm4gcmFuZG9tTW9kZWwuZXhlY3V0ZV9xdWVyeUFzeW5jKHF1ZXJpZXNbMF0ucXVlcnksIHF1ZXJpZXNbMF0ucGFyYW1zLCBvcHRpb25zKTtcbiAgICAgIH1cbiAgICAgIGRlYnVnKCdubyBxdWVyaWVzIHByb3ZpZGVkIGZvciBiYXRjaCByZXF1ZXN0LCBlbXB0eSBhcnJheSBmb3VuZCwgZG9pbmcgbm90aGluZycpO1xuICAgICAgcmV0dXJuIHt9O1xuICAgIH0pXG4gICAgLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICBiYXRjaFJlc3VsdCA9IHJlc3BvbnNlO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBxdWVyaWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGFmdGVySG9va1Jlc3BvbnNlID0gcXVlcmllc1tpXS5hZnRlcl9ob29rKCk7XG4gICAgICAgIGlmIChhZnRlckhvb2tSZXNwb25zZSAhPT0gdHJ1ZSkge1xuICAgICAgICAgIGNhbGxiYWNrKGFmdGVySG9va1Jlc3BvbnNlKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNhbGxiYWNrKG51bGwsIGJhdGNoUmVzdWx0KTtcbiAgICB9KVxuICAgIC5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICBjYWxsYmFjayhlcnIpO1xuICAgIH0pO1xufTtcblxuQ2Fzc2FuZHJhQ2xpZW50LnByb3RvdHlwZS5kb0JhdGNoQXN5bmMgPSBQcm9taXNlLnByb21pc2lmeShDYXNzYW5kcmFDbGllbnQucHJvdG90eXBlLmRvQmF0Y2gpO1xuXG5DYXNzYW5kcmFDbGllbnQuZG9CYXRjaCA9IGZ1bmN0aW9uIGYocXVlcmllcywgb3B0aW9ucywgY2FsbGJhY2spIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIHtcbiAgICBjYWxsYmFjayA9IG9wdGlvbnM7XG4gICAgb3B0aW9ucyA9IHt9O1xuICB9XG5cbiAgY29uc3QgZGVmYXVsdHMgPSB7XG4gICAgcHJlcGFyZTogdHJ1ZSxcbiAgfTtcblxuICBvcHRpb25zID0gXy5kZWZhdWx0c0RlZXAoe30sIG9wdGlvbnMsIGRlZmF1bHRzKTtcblxuICBDYXNzYW5kcmFDbGllbnQucHJvdG90eXBlLmRvQmF0Y2guY2FsbChDYXNzYW5kcmFDbGllbnQsIHF1ZXJpZXMsIG9wdGlvbnMsIGNhbGxiYWNrKTtcbn07XG5cbkNhc3NhbmRyYUNsaWVudC5kb0JhdGNoQXN5bmMgPSBQcm9taXNlLnByb21pc2lmeShDYXNzYW5kcmFDbGllbnQuZG9CYXRjaCk7XG5cbkNhc3NhbmRyYUNsaWVudC5fdHJhbnNsYXRlRmlsZU5hbWVUb01vZGVsTmFtZSA9IChmaWxlTmFtZSkgPT4gKFxuICBmaWxlTmFtZS5zbGljZSgwLCBmaWxlTmFtZS5sYXN0SW5kZXhPZignLicpKS5yZXBsYWNlKCdNb2RlbCcsICcnKVxuKTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQ2Fzc2FuZHJhQ2xpZW50LCB7XG4gIGNvbnNpc3RlbmNpZXM6IHtcbiAgICBnZXQoKSB7XG4gICAgICByZXR1cm4gY3FsLnR5cGVzLmNvbnNpc3RlbmNpZXM7XG4gICAgfSxcbiAgfSxcbiAgZGF0YXR5cGVzOiB7XG4gICAgZ2V0KCkge1xuICAgICAgcmV0dXJuIGNxbC50eXBlcztcbiAgICB9LFxuICB9LFxuICBkcml2ZXI6IHtcbiAgICBnZXQoKSB7XG4gICAgICByZXR1cm4gY3FsO1xuICAgIH0sXG4gIH0sXG4gIGluc3RhbmNlOiB7XG4gICAgZ2V0KCkge1xuICAgICAgcmV0dXJuIENhc3NhbmRyYUNsaWVudC5tb2RlbEluc3RhbmNlO1xuICAgIH0sXG4gIH0sXG4gIGNsb3NlOiB7XG4gICAgZ2V0KCkge1xuICAgICAgcmV0dXJuIENhc3NhbmRyYUNsaWVudC5vcm0uY2xvc2U7XG4gICAgfSxcbiAgfSxcbiAgY2xvc2VBc3luYzoge1xuICAgIGdldCgpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnByb21pc2lmeShDYXNzYW5kcmFDbGllbnQub3JtLmNsb3NlKTtcbiAgICB9LFxuICB9LFxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKENhc3NhbmRyYUNsaWVudC5wcm90b3R5cGUsIHtcbiAgY29uc2lzdGVuY2llczoge1xuICAgIGdldCgpIHtcbiAgICAgIHJldHVybiBjcWwudHlwZXMuY29uc2lzdGVuY2llcztcbiAgICB9LFxuICB9LFxuICBkYXRhdHlwZXM6IHtcbiAgICBnZXQoKSB7XG4gICAgICByZXR1cm4gY3FsLnR5cGVzO1xuICAgIH0sXG4gIH0sXG4gIGRyaXZlcjoge1xuICAgIGdldCgpIHtcbiAgICAgIHJldHVybiBjcWw7XG4gICAgfSxcbiAgfSxcbiAgaW5zdGFuY2U6IHtcbiAgICBnZXQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5tb2RlbEluc3RhbmNlO1xuICAgIH0sXG4gIH0sXG4gIGNsb3NlOiB7XG4gICAgZ2V0KCkge1xuICAgICAgcmV0dXJuIHRoaXMub3JtLmNsb3NlO1xuICAgIH0sXG4gIH0sXG4gIGNsb3NlQXN5bmM6IHtcbiAgICBnZXQoKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5wcm9taXNpZnkodGhpcy5vcm0uY2xvc2UpO1xuICAgIH0sXG4gIH0sXG59KTtcblxuQ2Fzc2FuZHJhQ2xpZW50LnByb3RvdHlwZS51dWlkID0gQ2Fzc2FuZHJhQ2xpZW50LnV1aWQ7XG5DYXNzYW5kcmFDbGllbnQucHJvdG90eXBlLnV1aWRGcm9tU3RyaW5nID0gQ2Fzc2FuZHJhQ2xpZW50LnV1aWRGcm9tU3RyaW5nO1xuQ2Fzc2FuZHJhQ2xpZW50LnByb3RvdHlwZS51dWlkRnJvbUJ1ZmZlciA9IENhc3NhbmRyYUNsaWVudC51dWlkRnJvbUJ1ZmZlcjtcbkNhc3NhbmRyYUNsaWVudC5wcm90b3R5cGUudGltZXV1aWQgPSBDYXNzYW5kcmFDbGllbnQudGltZXV1aWQ7XG5DYXNzYW5kcmFDbGllbnQucHJvdG90eXBlLnRpbWV1dWlkRnJvbURhdGUgPSBDYXNzYW5kcmFDbGllbnQudGltZXV1aWRGcm9tRGF0ZTtcbkNhc3NhbmRyYUNsaWVudC5wcm90b3R5cGUudGltZXV1aWRGcm9tU3RyaW5nID0gQ2Fzc2FuZHJhQ2xpZW50LnRpbWV1dWlkRnJvbVN0cmluZztcbkNhc3NhbmRyYUNsaWVudC5wcm90b3R5cGUudGltZXV1aWRGcm9tQnVmZmVyID0gQ2Fzc2FuZHJhQ2xpZW50LnRpbWV1dWlkRnJvbUJ1ZmZlcjtcbkNhc3NhbmRyYUNsaWVudC5wcm90b3R5cGUubWF4VGltZXV1aWQgPSBDYXNzYW5kcmFDbGllbnQubWF4VGltZXV1aWQ7XG5DYXNzYW5kcmFDbGllbnQucHJvdG90eXBlLm1pblRpbWV1dWlkID0gQ2Fzc2FuZHJhQ2xpZW50Lm1pblRpbWV1dWlkO1xuXG5DYXNzYW5kcmFDbGllbnQucHJvdG90eXBlLl90cmFuc2xhdGVGaWxlTmFtZVRvTW9kZWxOYW1lID0gQ2Fzc2FuZHJhQ2xpZW50Ll90cmFuc2xhdGVGaWxlTmFtZVRvTW9kZWxOYW1lO1xuXG5tb2R1bGUuZXhwb3J0cyA9IENhc3NhbmRyYUNsaWVudDtcbiJdfQ==

@@ -184,2 +184,2 @@ 'use strict';

module.exports = buildError;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9vcm0vYXBvbGxvX2Vycm9yLmpzIl0sIm5hbWVzIjpbInV0aWwiLCJyZXF1aXJlIiwiQUVSUk9SX1RZUEVTIiwidW5zcGVjaWZpZWQiLCJtc2ciLCJFUlJfTkFNRV9QUkVGSVgiLCJidWlsZEVycm9yIiwiZiIsImFyZ3MiLCJhcmdzYXJyYXkiLCJuYW1lIiwibGVuZ3RoIiwic2hpZnQiLCJlcnJvclRlbXBsYXRlIiwiZXJyb3JNc2ciLCJmb3JtYXQiLCJhcHBseSIsImNvbmNhdCIsImVycm9yIiwiRXJyb3IiLCJtb2R1bGUiLCJleHBvcnRzIl0sIm1hcHBpbmdzIjoiOztBQUFBLElBQU1BLE9BQU9DLFFBQVEsTUFBUixDQUFiOztBQUVBLElBQU1DLGVBQWU7QUFDbkJDLGVBQWE7QUFDWEMsU0FBSztBQURNLEdBRE07QUFJbkIsbUNBQWlDO0FBQy9CQSxTQUFLO0FBRDBCLEdBSmQ7QUFPbkIsZ0NBQThCO0FBQzVCQSxTQUFLO0FBRHVCLEdBUFg7QUFVbkIsZ0NBQThCO0FBQzVCQSxTQUFLO0FBRHVCLEdBVlg7QUFhbkIsZ0NBQThCO0FBQzVCQSxTQUFLO0FBRHVCLEdBYlg7QUFnQm5CLG1DQUFpQztBQUMvQkEsU0FBSztBQUQwQixHQWhCZDtBQW1CbkIsa0NBQWdDO0FBQzlCQSxTQUFLO0FBRHlCLEdBbkJiO0FBc0JuQixxQ0FBbUM7QUFDakNBLFNBQUs7QUFENEIsR0F0QmhCO0FBeUJuQix1Q0FBcUM7QUFDbkNBLFNBQUs7QUFEOEIsR0F6QmxCO0FBNEJuQix3Q0FBc0M7QUFDcENBLFNBQUs7QUFEK0IsR0E1Qm5CO0FBK0JuQix3Q0FBc0M7QUFDcENBLFNBQUs7QUFEK0IsR0EvQm5CO0FBa0NuQixrQ0FBZ0M7QUFDOUJBLFNBQUs7QUFEeUIsR0FsQ2I7QUFxQ25CLGlDQUErQjtBQUM3QkEsU0FBSztBQUR3QixHQXJDWjtBQXdDbkIsZ0NBQThCO0FBQzVCQSxTQUFLO0FBRHVCLEdBeENYO0FBMkNuQix1Q0FBcUM7QUFDbkNBLFNBQUs7QUFE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Qjs7QUFJQSxNQUFNYyxRQUFRLElBQUlDLEtBQUosQ0FBVUwsUUFBVixDQUFkO0FBQ0FJLFFBQU1SLElBQU4sR0FBYSxDQUFDTCxrQkFBa0JMLEtBQUtlLE1BQUwsQ0FBWSxLQUFaLEVBQW1CVixlQUFuQixDQUFsQixHQUF3RCxFQUF6RCxJQUErREssSUFBNUU7O0FBRUEsU0FBT1EsS0FBUDtBQUNELENBYkQ7O0FBZUFFLE9BQU9DLE9BQVAsR0FBaUJmLFVBQWpCIiwiZmlsZSI6ImFwb2xsb19lcnJvci5qcyIsInNvdXJjZXNDb250ZW50IjpbImNvbnN0IHV0aWwgPSByZXF1aXJlKCd1dGlsJyk7XG5cbmNvbnN0IEFFUlJPUl9UWVBFUyA9IHtcbiAgdW5zcGVjaWZpZWQ6IHtcbiAgICBtc2c6ICdVbnNwZWNpZmllZCBlcnJvciAtPicsXG4gIH0sXG4gICdtb2RlbC52YWxpZGF0b3IuaW52YWxpZGNvbmZpZyc6IHtcbiAgICBtc2c6ICclcycsXG4gIH0sXG4gICdtb2RlbC52YWxpZGF0b3IuaW52YWxpZHVkdCc6IHtcbiAgICBtc2c6ICclcycsXG4gIH0sXG4gICdtb2RlbC52YWxpZGF0b3IuaW52YWxpZHVkZic6IHtcbiAgICBtc2c6ICclcycsXG4gIH0sXG4gICdtb2RlbC52YWxpZGF0b3IuaW52YWxpZHVkYSc6IHtcbiAgICBtc2c6ICclcycsXG4gIH0sXG4gICdtb2RlbC52YWxpZGF0b3IuaW52YWxpZHNjaGVtYSc6IHtcbiAgICBtc2c6ICclcycsXG4gIH0sXG4gICdtb2RlbC52YWxpZGF0b3IuaW52YWxpZHZhbHVlJzoge1xuICAgIG1zZzogJyVzJyxcbiAgfSxcbiAgJ21vZGVsLnRhYmxlY3JlYXRpb24uaW52YWxpZG5hbWUnOiB7XG4gICAgbXNnOiAnVGFibGUgbmFtZXMgb25seSBhbGxvdyBhbHBoYW51bWVyaWMgYW5kIF8gYW5kIG11c3Qgc3RhcnQgd2l0aCBhIGxldHRlciwgZ290ICVzJyxcbiAgfSxcbiAgJ21vZGVsLnRhYmxlY3JlYXRpb24uZGJzY2hlbWFxdWVyeSc6IHtcbiAgICBtc2c6ICdFcnJvciB3aGlsZSByZXRyaWV2ZWluZyBTY2hlbWEgb2YgREIgVGFibGUgXCIlc1wiJyxcbiAgfSxcbiAgJ21vZGVsLnRhYmxlY3JlYXRpb24uc2NoZW1hbWlzbWF0Y2gnOiB7XG4gICAgbXNnOiAnR2l2ZW4gU2NoZW1hIGRvZXMgbm90IG1hdGNoIGV4aXN0aW5nIERCIFRhYmxlIFwiJXNcIlxcbiVzJyxcbiAgfSxcbiAgJ21vZGVsLnRhYmxlY3JlYXRpb24uc2NoZW1hbm90Zm91bmQnOiB7XG4gICAgbXNnOiAnTm8gREIgVGFibGUgd2FzIGZvdW5kIGZvciBHaXZlbiBTY2hlbWEgLT4gJXMnLFxuICB9LFxuICAnbW9kZWwudGFibGVjcmVhdGlvbi5kYmNyZWF0ZSc6IHtcbiAgICBtc2c6ICdFcnJvciB3aGlsZSBjcmVhdGluZyBEQiBUYWJsZSAtPiAlcycsXG4gIH0sXG4gICdtb2RlbC50YWJsZWNyZWF0aW9uLmRiYWx0ZXInOiB7XG4gICAgbXNnOiAnRXJyb3Igd2hpbGUgYWx0ZXJpbmcgREIgVGFibGUgLT4gJXMnLFxuICB9LFxuICAnbW9kZWwudGFibGVjcmVhdGlvbi5kYmRyb3AnOiB7XG4gICAgbXNnOiAnRXJyb3Igd2hpbGUgZHJvcHBpbmcgREIgVGFibGUgLT4gJXMnLFxuICB9LFxuICAnbW9kZWwudGFibGVjcmVhdGlvbi5kYmluZGV4Y3JlYXRlJzoge1xuICAgIG1zZzogJ0Vycm9yIHdoaWxlIGNyZWF0aW5nIGluZGV4IG9uIERCIFRhYmxlIC0+ICVzJyxcbiAgfSxcbiAgJ21vZGVsLnRhYmxlY3JlYXRpb24uZGJpbmRleGRyb3AnOiB7XG4gICAgbXNnOiAnRXJyb3Igd2hpbGUgZHJvcHBpbmcgaW5kZXggb24gREIgVGFibGUgLT4gJXMnLFxuICB9LFxuICAnbW9kZWwudGFibGVjcmVhdGlvbi5tYXR2aWV3Y3JlYXRlJzoge1xuICAgIG1zZzogJ0Vycm9yIHdoaWxlIGNyZWF0aW5nIG1hdGVyaWFsaXplZCB2aWV3IG9uIERCIFRhYmxlIC0+ICVzJyxcbiAgfSxcbiAgJ21vZGVsLnRhYmxlY3JlYXRpb24ubWF0dmlld2Ryb3AnOiB7XG4gICAgbXNnOiAnRXJyb3Igd2hpbGUgZHJvcHBpbmcgbWF0ZXJpYWxpemVkIHZpZXcgb24gREIgVGFibGUgLT4gJXMnLFxuICB9LFxuICAnbW9kZWwuZmluZC5pbnZhbGlkb3AnOiB7XG4gICAgbXNnOiAnSW52YWxpZCBmaWVsZCByZWxhdGlvbjogdW5rbm93biBvcGVyYXRvcjogXCIlc1wiJyxcbiAgfSxcbiAgJ21vZGVsLmZpbmQuaW52YWxpZGV4cHInOiB7XG4gICAgbXNnOiAnJGV4cHIgbXVzdCBiZSBhbiBvYmplY3QgY29udGFpbmluZyB0aGUgaW5kZXggbmFtZSBhcyBzdHJpbmcgYW5kIHF1ZXJ5IGFzIHN0cmluZy4nLFxuICB9LFxuICAnbW9kZWwuZmluZC5pbnZhbGlkc29scnF1ZXJ5Jzoge1xuICAgIG1zZzogJyRzb2xyX3F1ZXJ5IG11c3QgYmUgYSBzdHJpbmcgY29udGFpbmluZyB0aGUgcXVlcnkgZm9yIHNvbHIuJyxcbiAgfSxcbiAgJ21vZGVsLmZpbmQuaW52YWxpZG9yZGVyJzoge1xuICAgIG1zZzogJ0ludmFsaWQgJG9yZGVyYnkgcXVlcnksICRvcmRlcmJ5IG11c3QgYmUgYW4gb2JqZWN0JyxcbiAgfSxcbiAgJ21vZGVsLmZpbmQuaW52YWxpZGdyb3VwJzoge1xuICAgIG1zZzogJ0ludmFsaWQgJGdyb3VwYnkgcXVlcnksICRncm91cGJ5IG11c3QgYmUgYW4gYXJyYXknLFxuICB9LFxuICAnbW9kZWwuZmluZC5tdWx0aW9yZGVyJzoge1xuICAgIG1zZzogJ0ludmFsaWQgJG9yZGVyYnkgcXVlcnk6IG9ubHkgb25lIGNsYXVzZSBwZXIgb2JqZWN0IGlzIGFsbG93ZWQnLFxuICB9LFxuICAnbW9kZWwuZmluZC5pbnZhbGlkb3JkZXJ0eXBlJzoge1xuICAgIG1zZzogJ0ludmFsaWQgJG9yZGVyYnkgcXVlcnksIGFsbG93ZWQgb3JkZXI6ICRhc2MgLyAkZGVzYywgZ2l2ZW4gXCIlc1wiJyxcbiAgfSxcbiAgJ21vZGVsLmZpbmQubGltaXR0eXBlJzoge1xuICAgIG1zZzogJyRsaW1pdCBtdXN0IGJlIGFuIGludGVnZXIsIGdpdmVuIHZhbHVlIFwiJXNcIicsXG4gIH0sXG4gICdtb2RlbC5maW5kLmludmFsaWRpbm9wJzoge1xuICAgIG1zZzogJ0ludmFsaWQgJGluIHF1ZXJ5LiAkaW4gbXVzdCBiZSBhbiBhcnJheScsXG4gIH0sXG4gICdtb2RlbC5maW5kLmludmFsaWRjb250YWluc29wJzoge1xuICAgIG1zZzogJ0ludmFsaWQgJGNvbnRhaW5zIHF1ZXJ5LCAkY29udGFpbnMgb3BlcmF0b3IgaXMgb25seSB2YWxpZCBmb3IgaW5kZXhlZCBjb2xsZWN0aW9ucycsXG4gIH0sXG4gICdtb2RlbC5maW5kLmludmFsaWRjb250YWluc2tleW9wJzoge1xuICAgIG1zZzogJ0ludmFsaWQgJGNvbnRhaW5zX2tleSBxdWVyeSwgJGNvbnRhaW5zX2tleSBvcGVyYXRvciBpcyBvbmx5IHZhbGlkIGZvciBpbmRleGVkIG1hcCBjb2xsZWN0aW9ucycsXG4gIH0sXG4gICdtb2RlbC5maW5kLmludmFsaWR0b2tlbic6IHtcbiAgICBtc2c6ICdJbnZhbGlkICR0b2tlbiBxdWVyeS4gJHRva2VuIG11c3QgYmUgYW4gb2JqZWN0IHdpdGggb3BlcmF0b3IgdmFsdWVzJyxcbiAgfSxcbiAgJ21vZGVsLmZpbmQuaW52YWxpZHRva2Vub3AnOiB7XG4gICAgbXNnOiAnSW52YWxpZCBvcGVyYXRvcjogXCIlc1wiIGluICR0b2tlbiBxdWVyeScsXG4gIH0sXG4gICdtb2RlbC5maW5kLnN0cmVhbWVycm9yJzoge1xuICAgIG1zZzogJ0ludmFsaWQgc3RyZWFtIHF1ZXJ5IC0+ICVzJyxcbiAgfSxcbiAgJ21vZGVsLmZpbmQuZWFjaHJvd2Vycm9yJzoge1xuICAgIG1zZzogJ0ludmFsaWQgZWFjaFJvdyBxdWVyeSAtPiAlcycsXG4gIH0sXG4gICdtb2RlbC5maW5kLmNiZXJyb3InOiB7XG4gICAgbXNnOiAnTm8gdmFsaWQgY2FsbGJhY2sgZnVuY3Rpb24gd2FzIHByb3ZpZGVkJyxcbiAgfSxcbiAgJ21vZGVsLmZpbmQuZGJlcnJvcic6IHtcbiAgICBtc2c6ICdFcnJvciBkdXJpbmcgZmluZCBxdWVyeSBvbiBEQiAtPiAlcycsXG4gIH0sXG4gICdtb2RlbC5zYXZlLnVuc2V0a2V5Jzoge1xuICAgIG1zZzogJ1ByaW1hcnkgS2V5IEZpZWxkOiAlcyBtdXN0IGhhdmUgYSB2YWx1ZScsXG4gIH0sXG4gICdtb2RlbC5zYXZlLnVuc2V0cmVxdWlyZWQnOiB7XG4gICAgbXNnOiAnUmVxdWlyZWQgRmllbGQ6ICVzIG11c3QgaGF2ZSBhIHZhbHVlJyxcbiAgfSxcbiAgJ21vZGVsLnNhdmUuaW52YWxpZGRlZmF1bHR2YWx1ZSc6IHtcbiAgICBtc2c6ICdJbnZhbGlkIERlZmF1bHQgdmFsdWU6IFwiJXNcIiBmb3IgRmllbGQ6ICVzIChUeXBlOiAlcyknLFxuICB9LFxuICAnbW9kZWwuc2F2ZS5kYmVycm9yJzoge1xuICAgIG1zZzogJ0Vycm9yIGR1cmluZyBzYXZlIHF1ZXJ5IG9uIERCIC0+ICVzJyxcbiAgfSxcbiAgJ21vZGVsLnNhdmUuYmVmb3JlLmVycm9yJzoge1xuICAgIG1zZzogJ0Vycm9yIGluIGJlZm9yZV9zYXZlIGxpZmVjeWNsZSBmdW5jdGlvbicsXG4gIH0sXG4gICdtb2RlbC5zYXZlLmFmdGVyLmVycm9yJzoge1xuICAgIG1zZzogJ0Vycm9yIGluIGFmdGVyX3NhdmUgbGlmZWN5Y2xlIGZ1bmN0aW9uJyxcbiAgfSxcbiAgJ21vZGVsLnVwZGF0ZS51bnNldGtleSc6IHtcbiAgICBtc2c6ICdQcmltYXJ5IEtleSBGaWVsZDogJXMgbXVzdCBoYXZlIGEgdmFsdWUnLFxuICB9LFxuICAnbW9kZWwudXBkYXRlLnVuc2V0cmVxdWlyZWQnOiB7XG4gICAgbXNnOiAnUmVxdWlyZWQgRmllbGQ6ICVzIG11c3QgaGF2ZSBhIHZhbHVlJyxcbiAgfSxcbiAgJ21vZGVsLnVwZGF0ZS5pbnZhbGlkZGVmYXVsdHZhbHVlJzoge1xuICAgIG1zZzogJ0ludmFsaWQgRGVmYXVsdCB2YWx1ZTogXCIlc1wiIGZvciBGaWVsZDogJXMgKFR5cGU6ICVzKScsXG4gIH0sXG4gICdtb2RlbC51cGRhdGUuaW52YWxpZHJlcGxhY2VvcCc6IHtcbiAgICBtc2c6ICdJbnZhbGlkICRyZXBsYWNlIG9wZXJhdGlvbiAtPiAlcycsXG4gIH0sXG4gICdtb2RlbC51cGRhdGUuaW52YWxpZHByZXBlbmRvcCc6IHtcbiAgICBtc2c6ICdJbnZhbGlkICRwcmVwZW5kIG9wZXJhdGlvbiAtPiAlcycsXG4gIH0sXG4gICdtb2RlbC51cGRhdGUuZGJlcnJvcic6IHtcbiAgICBtc2c6ICdFcnJvciBkdXJpbmcgdXBkYXRlIHF1ZXJ5IG9uIERCIC0+ICVzJyxcbiAgfSxcbiAgJ21vZGVsLnVwZGF0ZS5iZWZvcmUuZXJyb3InOiB7XG4gICAgbXNnOiAnRXJyb3IgaW4gYmVmb3JlX3VwZGF0ZSBsaWZlY3ljbGUgZnVuY3Rpb24nLFxuICB9LFxuICAnbW9kZWwudXBkYXRlLmFmdGVyLmVycm9yJzoge1xuICAgIG1zZzogJ0Vycm9yIGluIGFmdGVyX3VwZGF0ZSBsaWZlY3ljbGUgZnVuY3Rpb24nLFxuICB9LFxuICAnbW9kZWwuZGVsZXRlLmRiZXJyb3InOiB7XG4gICAgbXNnOiAnRXJyb3IgZHVyaW5nIGRlbGV0ZSBxdWVyeSBvbiBEQiAtPiAlcycsXG4gIH0sXG4gICdtb2RlbC5kZWxldGUuYmVmb3JlLmVycm9yJzoge1xuICAgIG1zZzogJ0Vycm9yIGluIGJlZm9yZV9kZWxldGUgbGlmZWN5Y2xlIGZ1bmN0aW9uJyxcbiAgfSxcbiAgJ21vZGVsLmRlbGV0ZS5hZnRlci5lcnJvcic6IHtcbiAgICBtc2c6ICdFcnJvciBpbiBhZnRlcl9kZWxldGUgbGlmZWN5Y2xlIGZ1bmN0aW9uJyxcbiAgfSxcbn07XG5cbmNvbnN0IEVSUl9OQU1FX1BSRUZJWCA9ICdhcG9sbG8nO1xuXG5jb25zdCBidWlsZEVycm9yID0gZnVuY3Rpb24gZiguLi5hcmdzKSB7XG4gIGNvbnN0IGFyZ3NhcnJheSA9IGFyZ3M7XG4gIGNvbnN0IG5hbWUgPSBhcmdzYXJyYXkubGVuZ3RoID8gYXJnc2FycmF5LnNoaWZ0KCkgOiAnX25vbmVfZ2l2ZW5fJztcblxuICBjb25zdCBlcnJvclRlbXBsYXRlID0gQUVSUk9SX1RZUEVTW25hbWVdIHx8IEFFUlJPUl9UWVBFUy51bnNwZWNpZmllZDtcbiAgY29uc3QgZXJyb3JNc2cgPSBhcmdzYXJyYXkubGVuZ3RoID9cbiAgICB1dGlsLmZvcm1hdC5hcHBseSh0aGlzLCBbZXJyb3JUZW1wbGF0ZS5tc2ddLmNvbmNhdChhcmdzYXJyYXkpKSA6XG4gICAgZXJyb3JUZW1wbGF0ZS5tc2c7XG5cbiAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IoZXJyb3JNc2cpO1xuICBlcnJvci5uYW1lID0gKEVSUl9OQU1FX1BSRUZJWCA/IHV0aWwuZm9ybWF0KCclcy4nLCBFUlJfTkFNRV9QUkVGSVgpIDogJycpICsgbmFtZTtcblxuICByZXR1cm4gZXJyb3I7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGJ1aWxkRXJyb3I7XG4iXX0=
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9vcm0vYXBvbGxvX2Vycm9yLmpzIl0sIm5hbWVzIjpbInV0aWwiLCJyZXF1aXJlIiwiQUVSUk9SX1RZUEVTIiwidW5zcGVjaWZpZWQiLCJtc2ciLCJFUlJfTkFNRV9QUkVGSVgiLCJidWlsZEVycm9yIiwiZiIsImFyZ3MiLCJhcmdzYXJyYXkiLCJuYW1lIiwibGVuZ3RoIiwic2hpZnQiLCJlcnJvclRlbXBsYXRlIiwiZXJyb3JNc2ciLCJmb3JtYXQiLCJhcHBseSIsImNvbmNhdCIsImVycm9yIiwiRXJyb3IiLCJtb2R1bGUiLCJleHBvcnRzIl0sIm1hcHBpbmdzIjoiOztBQUFBLElBQU1BLE9BQU9DLFFBQVEsTUFBUixDQUFiOztBQUVBLElBQU1DLGVBQWU7QUFDbkJDLGVBQWE7QUFDWEMsU0FBSztBQURNLEdBRE07QUFJbkIsbUNBQWlDO0FBQy9CQSxTQUFLO0FBRDBCLEdBSmQ7QUFPbkIsZ0NBQThCO0FBQzVCQSxTQUFLO0FBRHVCLEdBUFg7QUFVbkIsZ0NBQThCO0FBQzVCQSxTQUFLO0FBRHVCLEdBVlg7QUFhbkIsZ0NBQThCO0FBQzVCQSxTQUFLO0FBRHVCLEdBYlg7QUFnQm5CLG1DQUFpQztBQUMvQkEsU0FBSztBQUQwQixHQWhCZDtBQW1CbkIsa0NBQWdDO0FBQzlCQSxTQUFLO0FBRHlCLEdBbkJiO0FBc0JuQixxQ0FBbUM7QUFDakNBLFNBQUs7QUFENEIsR0F0QmhCO0FBeUJuQix1Q0FBcUM7QUFDbkNBLFNBQUs7QUFEOEIsR0F6QmxCO0FBNEJuQix3Q0FBc0M7QUFDcENBLFNBQUs7QUFEK0IsR0E1Qm5CO0FBK0JuQix3Q0FBc0M7QUFDcENBLFNBQUs7QUFEK0IsR0EvQm5CO0FBa0NuQixrQ0FBZ0M7QUFDOUJBLFNBQUs7QUFEeUIsR0FsQ2I7QUFxQ25CLGlDQUErQjtBQUM3QkEsU0FBSztBQUR3QixHQXJDWjtBQXdDbkIsZ0NBQThCO0FBQzVCQSxTQUFLO0FBRHVCLEdBeENYO0FBMkNuQix1Q0FBcUM7QUFDbkNBLFNBQUs7QUFE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Qjs7QUFJQSxNQUFNYyxRQUFRLElBQUlDLEtBQUosQ0FBVUwsUUFBVixDQUFkO0FBQ0FJLFFBQU1SLElBQU4sR0FBYSxDQUFDTCxrQkFBa0JMLEtBQUtlLE1BQUwsQ0FBWSxLQUFaLEVBQW1CVixlQUFuQixDQUFsQixHQUF3RCxFQUF6RCxJQUErREssSUFBNUU7O0FBRUEsU0FBT1EsS0FBUDtBQUNELENBYkQ7O0FBZUFFLE9BQU9DLE9BQVAsR0FBaUJmLFVBQWpCIiwiZmlsZSI6ImFwb2xsb19lcnJvci5qcyIsInNvdXJjZXNDb250ZW50IjpbImNvbnN0IHV0aWwgPSByZXF1aXJlKCd1dGlsJyk7XG5cbmNvbnN0IEFFUlJPUl9UWVBFUyA9IHtcbiAgdW5zcGVjaWZpZWQ6IHtcbiAgICBtc2c6ICdVbnNwZWNpZmllZCBlcnJvciAtPicsXG4gIH0sXG4gICdtb2RlbC52YWxpZGF0b3IuaW52YWxpZGNvbmZpZyc6IHtcbiAgICBtc2c6ICclcycsXG4gIH0sXG4gICdtb2RlbC52YWxpZGF0b3IuaW52YWxpZHVkdCc6IHtcbiAgICBtc2c6ICclcycsXG4gIH0sXG4gICdtb2RlbC52YWxpZGF0b3IuaW52YWxpZHVkZic6IHtcbiAgICBtc2c6ICclcycsXG4gIH0sXG4gICdtb2RlbC52YWxpZGF0b3IuaW52YWxpZHVkYSc6IHtcbiAgICBtc2c6ICclcycsXG4gIH0sXG4gICdtb2RlbC52YWxpZGF0b3IuaW52YWxpZHNjaGVtYSc6IHtcbiAgICBtc2c6ICclcycsXG4gIH0sXG4gICdtb2RlbC52YWxpZGF0b3IuaW52YWxpZHZhbHVlJzoge1xuICAgIG1zZzogJyVzJyxcbiAgfSxcbiAgJ21vZGVsLnRhYmxlY3JlYXRpb24uaW52YWxpZG5hbWUnOiB7XG4gICAgbXNnOiAnVGFibGUgbmFtZXMgb25seSBhbGxvdyBhbHBoYW51bWVyaWMgYW5kIF8gYW5kIG11c3Qgc3RhcnQgd2l0aCBhIGxldHRlciwgZ290ICVzJyxcbiAgfSxcbiAgJ21vZGVsLnRhYmxlY3JlYXRpb24uZGJzY2hlbWFxdWVyeSc6IHtcbiAgICBtc2c6ICdFcnJvciB3aGlsZSByZXRyaWV2ZWluZyBTY2hlbWEgb2YgREIgVGFibGUgXCIlc1wiJyxcbiAgfSxcbiAgJ21vZGVsLnRhYmxlY3JlYXRpb24uc2NoZW1hbWlzbWF0Y2gnOiB7XG4gICAgbXNnOiAnR2l2ZW4gU2NoZW1hIGRvZXMgbm90IG1hdGNoIGV4aXN0aW5nIERCIFRhYmxlIFwiJXNcIlxcbiVzJyxcbiAgfSxcbiAgJ21vZGVsLnRhYmxlY3JlYXRpb24uc2NoZW1hbm90Zm91bmQnOiB7XG4gICAgbXNnOiAnTm8gREIgVGFibGUgd2FzIGZvdW5kIGZvciBHaXZlbiBTY2hlbWEgLT4gJXMnLFxuICB9LFxuICAnbW9kZWwudGFibGVjcmVhdGlvbi5kYmNyZWF0ZSc6IHtcbiAgICBtc2c6ICdFcnJvciB3aGlsZSBjcmVhdGluZyBEQiBUYWJsZSAtPiAlcycsXG4gIH0sXG4gICdtb2RlbC50YWJsZWNyZWF0aW9uLmRiYWx0ZXInOiB7XG4gICAgbXNnOiAnRXJyb3Igd2hpbGUgYWx0ZXJpbmcgREIgVGFibGUgLT4gJXMnLFxuICB9LFxuICAnbW9kZWwudGFibGVjcmVhdGlvbi5kYmRyb3AnOiB7XG4gICAgbXNnOiAnRXJyb3Igd2hpbGUgZHJvcHBpbmcgREIgVGFibGUgLT4gJXMnLFxuICB9LFxuICAnbW9kZWwudGFibGVjcmVhdGlvbi5kYmluZGV4Y3JlYXRlJzoge1xuICAgIG1zZzogJ0Vycm9yIHdoaWxlIGNyZWF0aW5nIGluZGV4IG9uIERCIFRhYmxlIC0+ICVzJyxcbiAgfSxcbiAgJ21vZGVsLnRhYmxlY3JlYXRpb24uZGJpbmRleGRyb3AnOiB7XG4gICAgbXNnOiAnRXJyb3Igd2hpbGUgZHJvcHBpbmcgaW5kZXggb24gREIgVGFibGUgLT4gJXMnLFxuICB9LFxuICAnbW9kZWwudGFibGVjcmVhdGlvbi5tYXR2aWV3Y3JlYXRlJzoge1xuICAgIG1zZzogJ0Vycm9yIHdoaWxlIGNyZWF0aW5nIG1hdGVyaWFsaXplZCB2aWV3IG9uIERCIFRhYmxlIC0+ICVzJyxcbiAgfSxcbiAgJ21vZGVsLnRhYmxlY3JlYXRpb24ubWF0dmlld2Ryb3AnOiB7XG4gICAgbXNnOiAnRXJyb3Igd2hpbGUgZHJvcHBpbmcgbWF0ZXJpYWxpemVkIHZpZXcgb24gREIgVGFibGUgLT4gJXMnLFxuICB9LFxuICAnbW9kZWwuZmluZC5pbnZhbGlkb3AnOiB7XG4gICAgbXNnOiAnSW52YWxpZCBmaWVsZCByZWxhdGlvbjogdW5rbm93biBvcGVyYXRvcjogXCIlc1wiJyxcbiAgfSxcbiAgJ21vZGVsLmZpbmQuaW52YWxpZGV4cHInOiB7XG4gICAgbXNnOiAnJGV4cHIgbXVzdCBiZSBhbiBvYmplY3QgY29udGFpbmluZyB0aGUgaW5kZXggbmFtZSBhcyBzdHJpbmcgYW5kIHF1ZXJ5IGFzIHN0cmluZy4nLFxuICB9LFxuICAnbW9kZWwuZmluZC5pbnZhbGlkc29scnF1ZXJ5Jzoge1xuICAgIG1zZzogJyRzb2xyX3F1ZXJ5IG11c3QgYmUgYSBzdHJpbmcgY29udGFpbmluZyB0aGUgcXVlcnkgZm9yIHNvbHIuJyxcbiAgfSxcbiAgJ21vZGVsLmZpbmQuaW52YWxpZG9yZGVyJzoge1xuICAgIG1zZzogJ0ludmFsaWQgJG9yZGVyYnkgcXVlcnksICRvcmRlcmJ5IG11c3QgYmUgYW4gb2JqZWN0JyxcbiAgfSxcbiAgJ21vZGVsLmZpbmQuaW52YWxpZGdyb3VwJzoge1xuICAgIG1zZzogJ0ludmFsaWQgJGdyb3VwYnkgcXVlcnksICRncm91cGJ5IG11c3QgYmUgYW4gYXJyYXknLFxuICB9LFxuICAnbW9kZWwuZmluZC5tdWx0aW9yZGVyJzoge1xuICAgIG1zZzogJ0ludmFsaWQgJG9yZGVyYnkgcXVlcnk6IG9ubHkgb25lIGNsYXVzZSBwZXIgb2JqZWN0IGlzIGFsbG93ZWQnLFxuICB9LFxuICAnbW9kZWwuZmluZC5pbnZhbGlkb3JkZXJ0eXBlJzoge1xuICAgIG1zZzogJ0ludmFsaWQgJG9yZGVyYnkgcXVlcnksIGFsbG93ZWQgb3JkZXI6ICRhc2MgLyAkZGVzYywgZ2l2ZW4gXCIlc1wiJyxcbiAgfSxcbiAgJ21vZGVsLmZpbmQubGltaXR0eXBlJzoge1xuICAgIG1zZzogJyRsaW1pdCBtdXN0IGJlIGFuIGludGVnZXIsIGdpdmVuIHZhbHVlIFwiJXNcIicsXG4gIH0sXG4gICdtb2RlbC5maW5kLmludmFsaWRpbm9wJzoge1xuICAgIG1zZzogJ0ludmFsaWQgJGluIHF1ZXJ5LiAkaW4gbXVzdCBiZSBhbiBhcnJheScsXG4gIH0sXG4gICdtb2RlbC5maW5kLmludmFsaWRjb250YWluc29wJzoge1xuICAgIG1zZzogJ0ludmFsaWQgJGNvbnRhaW5zIHF1ZXJ5LCAkY29udGFpbnMgb3BlcmF0b3IgaXMgb25seSB2YWxpZCBmb3IgaW5kZXhlZCBjb2xsZWN0aW9ucycsXG4gIH0sXG4gICdtb2RlbC5maW5kLmludmFsaWRjb250YWluc2tleW9wJzoge1xuICAgIG1zZzogJ0ludmFsaWQgJGNvbnRhaW5zX2tleSBxdWVyeSwgJGNvbnRhaW5zX2tleSBvcGVyYXRvciBpcyBvbmx5IHZhbGlkIGZvciBpbmRleGVkIG1hcCBjb2xsZWN0aW9ucycsXG4gIH0sXG4gICdtb2RlbC5maW5kLmludmFsaWR0b2tlbic6IHtcbiAgICBtc2c6ICdJbnZhbGlkICR0b2tlbiBxdWVyeS4gJHRva2VuIG11c3QgYmUgYW4gb2JqZWN0IHdpdGggb3BlcmF0b3IgdmFsdWVzJyxcbiAgfSxcbiAgJ21vZGVsLmZpbmQuaW52YWxpZHRva2Vub3AnOiB7XG4gICAgbXNnOiAnSW52YWxpZCBvcGVyYXRvcjogXCIlc1wiIGluICR0b2tlbiBxdWVyeScsXG4gIH0sXG4gICdtb2RlbC5maW5kLnN0cmVhbWVycm9yJzoge1xuICAgIG1zZzogJ0ludmFsaWQgc3RyZWFtIHF1ZXJ5IC0+ICVzJyxcbiAgfSxcbiAgJ21vZGVsLmZpbmQuZWFjaHJvd2Vycm9yJzoge1xuICAgIG1zZzogJ0ludmFsaWQgZWFjaFJvdyBxdWVyeSAtPiAlcycsXG4gIH0sXG4gICdtb2RlbC5maW5kLmNiZXJyb3InOiB7XG4gICAgbXNnOiAnTm8gdmFsaWQgY2FsbGJhY2sgZnVuY3Rpb24gd2FzIHByb3ZpZGVkJyxcbiAgfSxcbiAgJ21vZGVsLmZpbmQuZGJlcnJvcic6IHtcbiAgICBtc2c6ICdFcnJvciBkdXJpbmcgZmluZCBxdWVyeSBvbiBEQiAtPiAlcycsXG4gIH0sXG4gICdtb2RlbC5zYXZlLnVuc2V0a2V5Jzoge1xuICAgIG1zZzogJ1ByaW1hcnkgS2V5IEZpZWxkOiAlcyBtdXN0IGhhdmUgYSB2YWx1ZScsXG4gIH0sXG4gICdtb2RlbC5zYXZlLnVuc2V0cmVxdWlyZWQnOiB7XG4gICAgbXNnOiAnUmVxdWlyZWQgRmllbGQ6ICVzIG11c3QgaGF2ZSBhIHZhbHVlJyxcbiAgfSxcbiAgJ21vZGVsLnNhdmUuaW52YWxpZGRlZmF1bHR2YWx1ZSc6IHtcbiAgICBtc2c6ICdJbnZhbGlkIERlZmF1bHQgdmFsdWU6IFwiJXNcIiBmb3IgRmllbGQ6ICVzIChUeXBlOiAlcyknLFxuICB9LFxuICAnbW9kZWwuc2F2ZS5kYmVycm9yJzoge1xuICAgIG1zZzogJ0Vycm9yIGR1cmluZyBzYXZlIHF1ZXJ5IG9uIERCIC0+ICVzJyxcbiAgfSxcbiAgJ21vZGVsLnNhdmUuYmVmb3JlLmVycm9yJzoge1xuICAgIG1zZzogJ0Vycm9yIGluIGJlZm9yZV9zYXZlIGxpZmVjeWNsZSBmdW5jdGlvbicsXG4gIH0sXG4gICdtb2RlbC5zYXZlLmFmdGVyLmVycm9yJzoge1xuICAgIG1zZzogJ0Vycm9yIGluIGFmdGVyX3NhdmUgbGlmZWN5Y2xlIGZ1bmN0aW9uJyxcbiAgfSxcbiAgJ21vZGVsLnVwZGF0ZS51bnNldGtleSc6IHtcbiAgICBtc2c6ICdQcmltYXJ5IEtleSBGaWVsZDogJXMgbXVzdCBoYXZlIGEgdmFsdWUnLFxuICB9LFxuICAnbW9kZWwudXBkYXRlLnVuc2V0cmVxdWlyZWQnOiB7XG4gICAgbXNnOiAnUmVxdWlyZWQgRmllbGQ6ICVzIG11c3QgaGF2ZSBhIHZhbHVlJyxcbiAgfSxcbiAgJ21vZGVsLnVwZGF0ZS5pbnZhbGlkZGVmYXVsdHZhbHVlJzoge1xuICAgIG1zZzogJ0ludmFsaWQgRGVmYXVsdCB2YWx1ZTogXCIlc1wiIGZvciBGaWVsZDogJXMgKFR5cGU6ICVzKScsXG4gIH0sXG4gICdtb2RlbC51cGRhdGUuaW52YWxpZHJlcGxhY2VvcCc6IHtcbiAgICBtc2c6ICdJbnZhbGlkICRyZXBsYWNlIG9wZXJhdGlvbiAtPiAlcycsXG4gIH0sXG4gICdtb2RlbC51cGRhdGUuaW52YWxpZHByZXBlbmRvcCc6IHtcbiAgICBtc2c6ICdJbnZhbGlkICRwcmVwZW5kIG9wZXJhdGlvbiAtPiAlcycsXG4gIH0sXG4gICdtb2RlbC51cGRhdGUuZGJlcnJvcic6IHtcbiAgICBtc2c6ICdFcnJvciBkdXJpbmcgdXBkYXRlIHF1ZXJ5IG9uIERCIC0+ICVzJyxcbiAgfSxcbiAgJ21vZGVsLnVwZGF0ZS5iZWZvcmUuZXJyb3InOiB7XG4gICAgbXNnOiAnRXJyb3IgaW4gYmVmb3JlX3VwZGF0ZSBsaWZlY3ljbGUgZnVuY3Rpb24nLFxuICB9LFxuICAnbW9kZWwudXBkYXRlLmFmdGVyLmVycm9yJzoge1xuICAgIG1zZzogJ0Vycm9yIGluIGFmdGVyX3VwZGF0ZSBsaWZlY3ljbGUgZnVuY3Rpb24nLFxuICB9LFxuICAnbW9kZWwuZGVsZXRlLmRiZXJyb3InOiB7XG4gICAgbXNnOiAnRXJyb3IgZHVyaW5nIGRlbGV0ZSBxdWVyeSBvbiBEQiAtPiAlcycsXG4gIH0sXG4gICdtb2RlbC5kZWxldGUuYmVmb3JlLmVycm9yJzoge1xuICAgIG1zZzogJ0Vycm9yIGluIGJlZm9yZV9kZWxldGUgbGlmZWN5Y2xlIGZ1bmN0aW9uJyxcbiAgfSxcbiAgJ21vZGVsLmRlbGV0ZS5hZnRlci5lcnJvcic6IHtcbiAgICBtc2c6ICdFcnJvciBpbiBhZnRlcl9kZWxldGUgbGlmZWN5Y2xlIGZ1bmN0aW9uJyxcbiAgfSxcbn07XG5cbmNvbnN0IEVSUl9OQU1FX1BSRUZJWCA9ICdhcG9sbG8nO1xuXG5jb25zdCBidWlsZEVycm9yID0gZnVuY3Rpb24gZiguLi5hcmdzKSB7XG4gIGNvbnN0IGFyZ3NhcnJheSA9IGFyZ3M7XG4gIGNvbnN0IG5hbWUgPSBhcmdzYXJyYXkubGVuZ3RoID8gYXJnc2FycmF5LnNoaWZ0KCkgOiAnX25vbmVfZ2l2ZW5fJztcblxuICBjb25zdCBlcnJvclRlbXBsYXRlID0gQUVSUk9SX1RZUEVTW25hbWVdIHx8IEFFUlJPUl9UWVBFUy51bnNwZWNpZmllZDtcbiAgY29uc3QgZXJyb3JNc2cgPSBhcmdzYXJyYXkubGVuZ3RoXG4gICAgPyB1dGlsLmZvcm1hdC5hcHBseSh0aGlzLCBbZXJyb3JUZW1wbGF0ZS5tc2ddLmNvbmNhdChhcmdzYXJyYXkpKVxuICAgIDogZXJyb3JUZW1wbGF0ZS5tc2c7XG5cbiAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IoZXJyb3JNc2cpO1xuICBlcnJvci5uYW1lID0gKEVSUl9OQU1FX1BSRUZJWCA/IHV0aWwuZm9ybWF0KCclcy4nLCBFUlJfTkFNRV9QUkVGSVgpIDogJycpICsgbmFtZTtcblxuICByZXR1cm4gZXJyb3I7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGJ1aWxkRXJyb3I7XG4iXX0=

@@ -165,2 +165,5 @@ 'use strict';

outputMView.where_clause = parser.get_mview_where_clause(outputSchema, outputMView).trim();
} else {
// some versions of cassandra/scylla return IS NOT null instead of IS NOT NULL
outputMView.where_clause = outputMView.where_clause.replace(/IS NOT null/g, 'IS NOT NULL');
}

@@ -258,2 +261,2 @@ if (_.isPlainObject(outputMView.filters)) {

module.exports = normalizer;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9ub3JtYWxpemVyLmpzIl0sIm5hbWVzIjpbIl8iLCJyZXF1aXJlIiwidXRpbCIsInBhcnNlciIsImFycmF5U29ydCIsImEiLCJiIiwibm9ybWFsaXplVHlwZURlZiIsInR5cGVEZWYiLCJmb3JtYXR0ZWRUeXBlRGVmIiwicmVwbGFjZSIsImZyb3plbk1hdGNoIiwibWF0Y2giLCJsZW5ndGgiLCJzbGljZSIsIm5vcm1hbGl6ZXIiLCJub3JtYWxpemVfcmVwbGljYXRpb25fb3B0aW9uIiwicmVwbGljYXRpb25PcHRpb25zIiwibm9ybWFsaXplZFJlcGxpY2F0aW9uT3B0aW9ucyIsIk9iamVjdCIsImtleXMiLCJmb3JFYWNoIiwia2V5IiwicGFyc2VJbnQiLCJub3JtYWxpemVfcXVlcnlfb3B0aW9uIiwib3B0aW9ucyIsInF1ZXJ5T3B0aW9ucyIsInByZXBhcmUiLCJjb25zaXN0ZW5jeSIsImZldGNoU2l6ZSIsImF1dG9QYWdlIiwiaGludHMiLCJwYWdlU3RhdGUiLCJyZXRyeSIsInNlcmlhbENvbnNpc3RlbmN5IiwiY3VzdG9tUGF5bG9hZCIsImlzSWRlbXBvdGVudCIsInJlYWRUaW1lb3V0IiwicmV0cnlPblRpbWVvdXQiLCJyb3V0aW5nSW5kZXhlcyIsInJvdXRpbmdLZXkiLCJyb3V0aW5nTmFtZXMiLCJ0aW1lc3RhbXAiLCJub3JtYWxpemVfdXNlcl9kZWZpbmVkX3R5cGUiLCJmaWVsZFR5cGUiLCJub3JtYWxpemVfcHJpbWFyeV9rZXkiLCJvdXRwdXRTY2hlbWEiLCJpIiwiY2x1c3RlcmluZ19vcmRlciIsInRvVXBwZXJDYXNlIiwibm9ybWFsaXplX2ZpZWxkcyIsIm1vZGVsU2NoZW1hIiwiZmllbGRzIiwiZmllbGROYW1lIiwidHlwZSIsInZpcnR1YWwiLCJpbmNsdWRlcyIsInR5cGVNYXBzIiwic3RhdGljTWFwcyIsInN0YXRpYyIsIm5vcm1hbGl6ZV9tYXRlcmlhbGl6ZWRfdmlld3MiLCJtYXRlcmlhbGl6ZWRfdmlld3MiLCJtYXRlcmlhbGl6ZWRWaWV3TmFtZSIsIm91dHB1dE1WaWV3IiwicGtleUluZGV4IiwicGFydGl0aW9uSW5kZXgiLCJzZWxlY3QiLCJwdXNoIiwic29ydCIsIndoZXJlX2NsYXVzZSIsImdldF9tdmlld193aGVyZV9jbGF1c2UiLCJ0cmltIiwiaXNQbGFpbk9iamVjdCIsImZpbHRlcnMiLCJub3JtYWxpemVfaW5kZXhlcyIsImluZGV4ZXMiLCJpbmRleE5hbWVMaXN0Iiwic3BsaXQiLCJ0b0xvd2VyQ2FzZSIsImZvcm1hdCIsIm5vcm1hbGl6ZV9jdXN0b21faW5kZXhlcyIsImN1c3RvbV9pbmRleCIsImN1c3RvbV9pbmRleGVzIiwiY3VzdG9tQXJyYXlTb3J0Iiwib24iLCJ1c2luZyIsInJlbW92ZSIsImNpbmRleCIsIm5vcm1hbGl6ZV9tb2RlbF9zY2hlbWEiLCJjbG9uZURlZXAiLCJub3JtYWxpemFibGVTY2hlbWFQcm9wZXJ0aWVzIiwic2NoZW1hUHJvcGVydHkiLCJyZW1vdmVfZGVwZW5kZW50X3ZpZXdzX2Zyb21fbm9ybWFsaXplZF9zY2hlbWEiLCJub3JtYWxpemVkREJTY2hlbWEiLCJkYlNjaGVtYSIsImRlcGVuZGVudFZpZXdzIiwiZGJWaWV3TmFtZSIsImlzQXJyYXkiLCJ2aWV3TmFtZSIsIm1vZHVsZSIsImV4cG9ydHMiXSwibWFwcGluZ3MiOiI7O0FBQUEsSUFBTUEsSUFBSUMsUUFBUSxRQUFSLENBQVY7QUFDQSxJQUFNQyxPQUFPRCxRQUFRLE1BQVIsQ0FBYjs7QUFFQSxJQUFNRSxTQUFTRixRQUFRLFVBQVIsQ0FBZjs7QUFFQSxJQUFNRyxZQUFZLFNBQVpBLFNBQVksQ0FBQ0MsQ0FBRCxFQUFJQyxDQUFKLEVBQVU7QUFDMUIsTUFBSUQsSUFBSUMsQ0FBUixFQUFXLE9BQU8sQ0FBUDtBQUNYLE1BQUlELElBQUlDLENBQVIsRUFBVyxPQUFPLENBQUMsQ0FBUjtBQUNYLFNBQU8sQ0FBUDtBQUNELENBSkQ7O0FBTUEsSUFBTUMsbUJBQW1CLFNBQW5CQSxnQkFBbUIsQ0FBQ0MsT0FBRCxF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QUF0QyxFQUFrRDFFLEdBQWxELENBQXNELENBQXRELEVBQXlEa0MsUUFBekQsQ0FBa0VILFNBQWxFLENBRFIsRUFDc0Y7QUFDM0YwQyx1QkFBZTVCLElBQWYsQ0FBb0I2QixVQUFwQjtBQUNEO0FBQ0YsS0FYRDtBQVlBRCxtQkFBZTFFLE9BQWYsQ0FBdUIsVUFBQzZFLFFBQUQsRUFBYztBQUNuQ0wseUJBQW1CaEMsa0JBQW5CLENBQXNDcUMsUUFBdEMsSUFBa0QsRUFBbEQ7QUFDRCxLQUZEO0FBR0Q7QUExT2dCLENBQW5COztBQTZPQUMsT0FBT0MsT0FBUCxHQUFpQnJGLFVBQWpCIiwiZmlsZSI6Im5vcm1hbGl6ZXIuanMiLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCBfID0gcmVxdWlyZSgnbG9kYXNoJyk7XG5jb25zdCB1dGlsID0gcmVxdWlyZSgndXRpbCcpO1xuXG5jb25zdCBwYXJzZXIgPSByZXF1aXJlKCcuL3BhcnNlcicpO1xuXG5jb25zdCBhcnJheVNvcnQgPSAoYSwgYikgPT4ge1xuICBpZiAoYSA+IGIpIHJldHVybiAxO1xuICBpZiAoYSA8IGIpIHJldHVybiAtMTtcbiAgcmV0dXJuIDA7XG59O1xuXG5jb25zdCBub3JtYWxpemVUeXBlRGVmID0gKHR5cGVEZWYpID0+IHtcbiAgY29uc3QgZm9ybWF0dGVkVHlwZURlZiA9IHR5cGVEZWYucmVwbGFjZSgvW1xcc10vZywgJycpLnJlcGxhY2UoL3ZhcmNoYXIvZywgJ3RleHQnKS5yZXBsYWNlKC9mcm96ZW4vaWcsICdmcm96ZW4nKTtcbiAgY29uc3QgZnJvemVuTWF0Y2ggPSBmb3JtYXR0ZWRUeXBlRGVmLm1hdGNoKC9mcm96ZW48L2cpO1xuICBpZiAoZnJvemVuTWF0Y2ggJiYgZnJvemVuTWF0Y2gubGVuZ3RoKSByZXR1cm4gZm9ybWF0dGVkVHlwZURlZi5yZXBsYWNlKC9mcm96ZW48L2csICcnKS5zbGljZSgwLCAtMSAqIGZyb3plbk1hdGNoLmxlbmd0aCk7XG4gIHJldHVybiBmb3JtYXR0ZWRUeXBlRGVmO1xufTtcblxuY29uc3Qgbm9ybWFsaXplciA9IHtcbiAgbm9ybWFsaXplX3JlcGxpY2F0aW9uX29wdGlvbihyZXBsaWNhdGlvbk9wdGlvbnMpIHtcbiAgICBjb25zdCBub3JtYWxpemVkUmVwbGljYXRpb25PcHRpb25zID0gcmVwbGljYXRpb25PcHRpb25zO1xuICAgIE9iamVjdC5rZXlzKG5vcm1hbGl6ZWRSZXBsaWNhdGlvbk9wdGlvbnMpLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgaWYgKGtleSA9PT0gJ2NsYXNzJykge1xuICAgICAgICBub3JtYWxpemVkUmVwbGljYXRpb25PcHRpb25zW2tleV0gPSBub3JtYWxpemVkUmVwbGljYXRpb25PcHRpb25zW2tleV0ucmVwbGFjZSgnb3JnLmFwYWNoZS5jYXNzYW5kcmEubG9jYXRvci4nLCAnJyk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIG5vcm1hbGl6ZWRSZXBsaWNhdGlvbk9wdGlvbnNba2V5XSA9IHBhcnNlSW50KG5vcm1hbGl6ZWRSZXBsaWNhdGlvbk9wdGlvbnNba2V5XSwgMTApO1xuICAgIH0pO1xuICAgIHJldHVybiBub3JtYWxpemVkUmVwbGljYXRpb25PcHRpb25zO1xuICB9LFxuXG4gIG5vcm1hbGl6ZV9xdWVyeV9vcHRpb24ob3B0aW9ucykge1xuICAgIGNvbnN0IHF1ZXJ5T3B0aW9ucyA9IHsgcHJlcGFyZTogb3B0aW9ucy5wcmVwYXJlIH07XG4gICAgaWYgKG9wdGlvbnMuY29uc2lzdGVuY3kpIHF1ZXJ5T3B0aW9ucy5jb25zaXN0ZW5jeSA9IG9wdGlvbnMuY29uc2lzdGVuY3k7XG4gICAgaWYgKG9wdGlvbnMuZmV0Y2hTaXplKSBxdWVyeU9wdGlvbnMuZmV0Y2hTaXplID0gb3B0aW9ucy5mZXRjaFNpemU7XG4gICAgaWYgKG9wdGlvbnMuYXV0b1BhZ2UpIHF1ZXJ5T3B0aW9ucy5hdXRvUGFnZSA9IG9wdGlvbnMuYXV0b1BhZ2U7XG4gICAgaWYgKG9wdGlvbnMuaGludHMpIHF1ZXJ5T3B0aW9ucy5oaW50cyA9IG9wdGlvbnMuaGludHM7XG4gICAgaWYgKG9wdGlvbnMucGFnZVN0YXRlKSBxdWVyeU9wdGlvbnMucGFnZVN0YXRlID0gb3B0aW9ucy5wYWdlU3RhdGU7XG4gICAgaWYgKG9wdGlvbnMucmV0cnkpIHF1ZXJ5T3B0aW9ucy5yZXRyeSA9IG9wdGlvbnMucmV0cnk7XG4gICAgaWYgKG9wdGlvbnMuc2VyaWFsQ29uc2lzdGVuY3kpIHF1ZXJ5T3B0aW9ucy5zZXJpYWxDb25zaXN0ZW5jeSA9IG9wdGlvbnMuc2VyaWFsQ29uc2lzdGVuY3k7XG4gICAgaWYgKG9wdGlvbnMuY3VzdG9tUGF5bG9hZCkgcXVlcnlPcHRpb25zLmN1c3RvbVBheWxvYWQgPSBvcHRpb25zLmN1c3RvbVBheWxvYWQ7XG4gICAgaWYgKG9wdGlvbnMuaXNJZGVtcG90ZW50KSBxdWVyeU9wdGlvbnMuaXNJZGVtcG90ZW50ID0gb3B0aW9ucy5pc0lkZW1wb3RlbnQ7XG4gICAgaWYgKG9wdGlvbnMucmVhZFRpbWVvdXQpIHF1ZXJ5T3B0aW9ucy5yZWFkVGltZW91dCA9IG9wdGlvbnMucmVhZFRpbWVvdXQ7XG4gICAgaWYgKG9wdGlvbnMucmV0cnkpIHF1ZXJ5T3B0aW9ucy5yZXRyeSA9IG9wdGlvbnMucmV0cnk7XG4gICAgaWYgKG9wdGlvbnMucmV0cnlPblRpbWVvdXQpIHF1ZXJ5T3B0aW9ucy5yZXRyeU9uVGltZW91dCA9IG9wdGlvbnMucmV0cnlPblRpbWVvdXQ7XG4gICAgaWYgKG9wdGlvbnMucm91dGluZ0luZGV4ZXMpIHF1ZXJ5T3B0aW9ucy5yb3V0aW5nSW5kZXhlcyA9IG9wdGlvbnMucm91dGluZ0luZGV4ZXM7XG4gICAgaWYgKG9wdGlvbnMucm91dGluZ0tleSkgcXVlcnlPcHRpb25zLnJvdXRpbmdLZXkgPSBvcHRpb25zLnJvdXRpbmdLZXk7XG4gICAgaWYgKG9wdGlvbnMucm91dGluZ05hbWVzKSBxdWVyeU9wdGlvbnMucm91dGluZ05hbWVzID0gb3B0aW9ucy5yb3V0aW5nTmFtZXM7XG4gICAgaWYgKG9wdGlvbnMudGltZXN0YW1wKSBxdWVyeU9wdGlvbnMudGltZXN0YW1wID0gb3B0aW9ucy50aW1lc3RhbXA7XG4gICAgcmV0dXJuIHF1ZXJ5T3B0aW9ucztcbiAgfSxcblxuICBub3JtYWxpemVfdXNlcl9kZWZpbmVkX3R5cGUoZmllbGRUeXBlKSB7XG4gICAgcmV0dXJuIG5vcm1hbGl6ZVR5cGVEZWYoZmllbGRUeXBlKTtcbiAgfSxcblxuICBub3JtYWxpemVfcHJpbWFyeV9rZXkob3V0cHV0U2NoZW1hKSB7XG4gICAgaWYgKG91dHB1dFNjaGVtYS5rZXkgJiYgdHlwZW9mIG91dHB1dFNjaGVtYS5rZXlbMF0gPT09ICdzdHJpbmcnKSB7XG4gICAgICBvdXRwdXRTY2hlbWEua2V5WzBdID0gW291dHB1dFNjaGVtYS5rZXlbMF1dO1xuICAgIH1cblxuICAgIGlmIChvdXRwdXRTY2hlbWEua2V5ICYmIG91dHB1dFNjaGVtYS5rZXkubGVuZ3RoKSB7XG4gICAgICBmb3IgKGxldCBpID0gMTsgaSA8IG91dHB1dFNjaGVtYS5rZXkubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKCFvdXRwdXRTY2hlbWEuY2x1c3RlcmluZ19vcmRlcikgb3V0cHV0U2NoZW1hLmNsdXN0ZXJpbmdfb3JkZXIgPSB7fTtcbiAgICAgICAgaWYgKCFvdXRwdXRTY2hlbWEuY2x1c3RlcmluZ19vcmRlcltvdXRwdXRTY2hlbWEua2V5W2ldXSkge1xuICAgICAgICAgIG91dHB1dFNjaGVtYS5jbHVzdGVyaW5nX29yZGVyW291dHB1dFNjaGVtYS5rZXlbaV1dID0gJ0FTQyc7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbWF4LWxlblxuICAgICAgICBvdXRwdXRTY2hlbWEuY2x1c3RlcmluZ19vcmRlcltvdXRwdXRTY2hlbWEua2V5W2ldXSA9IG91dHB1dFNjaGVtYS5jbHVzdGVyaW5nX29yZGVyW291dHB1dFNjaGVtYS5rZXlbaV1dLnRvVXBwZXJDYXNlKCk7XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG5vcm1hbGl6ZV9maWVsZHMobW9kZWxTY2hlbWEsIG91dHB1dFNjaGVtYSkge1xuICAgIE9iamVjdC5rZXlzKG91dHB1dFNjaGVtYS5maWVsZHMpLmZvckVhY2goKGZpZWxkTmFtZSkgPT4ge1xuICAgICAgaWYgKHR5cGVvZiAob3V0cHV0U2NoZW1hLmZpZWxkc1tmaWVsZE5hbWVdKSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgb3V0cHV0U2NoZW1hLmZpZWxkc1tmaWVsZE5hbWVdID0geyB0eXBlOiBvdXRwdXRTY2hlbWEuZmllbGRzW2ZpZWxkTmFtZV0gfTtcbiAgICAgIH1cblxuICAgICAgaWYgKGZpZWxkTmFtZSA9PT0gJ3NvbHJfcXVlcnknIHx8IG91dHB1dFNjaGVtYS5maWVsZHNbZmllbGROYW1lXS52aXJ0dWFsKSB7XG4gICAgICAgIGRlbGV0ZSBvdXRwdXRTY2hlbWEuZmllbGRzW2ZpZWxkTmFtZV07XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKG91dHB1dFNjaGVtYS5maWVsZHNbZmllbGROYW1lXS50eXBlRGVmKSB7XG4gICAgICAgIG91dHB1dFNjaGVtYS5maWVsZHNbZmllbGROYW1lXSA9IHtcbiAgICAgICAgICB0eXBlOiBvdXRwdXRTY2hlbWEuZmllbGRzW2ZpZWxkTmFtZV0udHlwZSxcbiAgICAgICAgICB0eXBlRGVmOiBvdXRwdXRTY2hlbWEuZmllbGRzW2ZpZWxkTmFtZV0udHlwZURlZixcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG91dHB1dFNjaGVtYS5maWVsZHNbZmllbGROYW1lXSA9IHsgdHlwZTogb3V0cHV0U2NoZW1hLmZpZWxkc1tmaWVsZE5hbWVdLnR5cGUgfTtcbiAgICAgIH1cblxuICAgICAgaWYgKG91dHB1dFNjaGVtYS5maWVsZHNbZmllbGROYW1lXS50eXBlID09PSAndmFyY2hhcicpIHtcbiAgICAgICAgb3V0cHV0U2NoZW1hLmZpZWxkc1tmaWVsZE5hbWVdLnR5cGUgPSAndGV4dCc7XG4gICAgICB9XG5cbiAgICAgIGlmIChbJ21hcCcsICdsaXN0JywgJ3NldCcsICdmcm96ZW4nXS5pbmNsdWRlcyhvdXRwdXRTY2hlbWEuZmllbGRzW2ZpZWxkTmFtZV0udHlwZSkpIHtcbiAgICAgICAgaWYgKG1vZGVsU2NoZW1hLnR5cGVNYXBzICYmIG1vZGVsU2NoZW1hLnR5cGVNYXBzW2ZpZWxkTmFtZV0pIHtcbiAgICAgICAgICBvdXRwdXRTY2hlbWEuZmllbGRzW2ZpZWxkTmFtZV0udHlwZURlZiA9IG5vcm1hbGl6ZVR5cGVEZWYobW9kZWxTY2hlbWEudHlwZU1hcHNbZmllbGROYW1lXSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb3V0cHV0U2NoZW1hLmZpZWxkc1tmaWVsZE5hbWVdLnR5cGVEZWYgPSBub3JtYWxpemVUeXBlRGVmKG91dHB1dFNjaGVtYS5maWVsZHNbZmllbGROYW1lXS50eXBlRGVmKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAobW9kZWxTY2hlbWEuc3RhdGljTWFwcyAmJiBtb2RlbFNjaGVtYS5zdGF0aWNNYXBzW2ZpZWxkTmFtZV0gPT09IHRydWUpIHtcbiAgICAgICAgb3V0cHV0U2NoZW1hLmZpZWxkc1tmaWVsZE5hbWVdLnN0YXRpYyA9IHRydWU7XG4gICAgICB9IGVsc2UgaWYgKG1vZGVsU2NoZW1hLmZpZWxkc1tmaWVsZE5hbWVdLnN0YXRpYykge1xuICAgICAgICBvdXRwdXRTY2hlbWEuZmllbGRzW2ZpZWxkTmFtZV0uc3RhdGljID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSxcblxuICBub3JtYWxpemVfbWF0ZXJpYWxpemVkX3ZpZXdzKG91dHB1dFNjaGVtYSkge1xuICAgIGlmICghb3V0cHV0U2NoZW1hLm1hdGVyaWFsaXplZF92aWV3cykge1xuICAgICAgb3V0cHV0U2NoZW1hLm1hdGVyaWFsaXplZF92aWV3cyA9IHt9O1xuICAgIH1cblxuICAgIE9iamVjdC5rZXlzKG91dHB1dFNjaGVtYS5tYXRlcmlhbGl6ZWRfdmlld3MpLmZvckVhY2goKG1hdGVyaWFsaXplZFZpZXdOYW1lKSA9PiB7XG4gICAgICBjb25zdCBvdXRwdXRNVmlldyA9IG91dHB1dFNjaGVtYS5tYXRlcmlhbGl6ZWRfdmlld3NbbWF0ZXJpYWxpemVkVmlld05hbWVdO1xuICAgICAgLy8gbWFrZSBwYXJpdGlvbiBrZXkgYW4gYXJyYXlcbiAgICAgIGlmIChvdXRwdXRNVmlldy5rZXkgJiYgdHlwZW9mIG91dHB1dE1WaWV3LmtleVswXSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgb3V0cHV0TVZpZXcua2V5WzBdID0gW291dHB1dE1WaWV3LmtleVswXV07XG4gICAgICB9XG5cbiAgICAgIC8vIGFkZCBjbHVzdGVyaW5nX29yZGVyIGZvciBhbGwgY2x1c3RlcmluZyBrZXlzXG4gICAgICBpZiAob3V0cHV0TVZpZXcua2V5ICYmIG91dHB1dE1WaWV3LmtleS5sZW5ndGgpIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPCBvdXRwdXRNVmlldy5rZXkubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBpZiAoIW91dHB1dE1WaWV3LmNsdXN0ZXJpbmdfb3JkZXIpIHtcbiAgICAgICAgICAgIG91dHB1dE1WaWV3LmNsdXN0ZXJpbmdfb3JkZXIgPSB7fTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCFvdXRwdXRNVmlldy5jbHVzdGVyaW5nX29yZGVyW291dHB1dE1WaWV3LmtleVtpXV0pIHtcbiAgICAgICAgICAgIG91dHB1dE1WaWV3LmNsdXN0ZXJpbmdfb3JkZXJbb3V0cHV0TVZpZXcua2V5W2ldXSA9ICdBU0MnO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbWF4LWxlblxuICAgICAgICAgIG91dHB1dE1WaWV3LmNsdXN0ZXJpbmdfb3JkZXJbb3V0cHV0TVZpZXcua2V5W2ldXSA9IG91dHB1dE1WaWV3LmNsdXN0ZXJpbmdfb3JkZXJbb3V0cHV0TVZpZXcua2V5W2ldXS50b1VwcGVyQ2FzZSgpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIGFkZCBhbGwgbm9uIGV4aXN0ZW50IHByaW1hcnkga2V5IGl0ZW1zIHRvIHNlbGVjdCBhbmQgc29ydCB0aGVtXG4gICAgICBmb3IgKGxldCBwa2V5SW5kZXggPSAwOyBwa2V5SW5kZXggPCBvdXRwdXRNVmlldy5rZXkubGVuZ3RoOyBwa2V5SW5kZXgrKykge1xuICAgICAgICBpZiAocGtleUluZGV4ID09PSAwKSB7XG4gICAgICAgICAgZm9yIChsZXQgcGFydGl0aW9uSW5kZXggPSAwOyBwYXJ0aXRpb25JbmRleCA8IG91dHB1dE1WaWV3LmtleVtwa2V5SW5kZXhdLmxlbmd0aDsgcGFydGl0aW9uSW5kZXgrKykge1xuICAgICAgICAgICAgaWYgKCFvdXRwdXRNVmlldy5zZWxlY3QuaW5jbHVkZXMob3V0cHV0TVZpZXcua2V5W3BrZXlJbmRleF1bcGFydGl0aW9uSW5kZXhdKSkge1xuICAgICAgICAgICAgICBvdXRwdXRNVmlldy5zZWxlY3QucHVzaChvdXRwdXRNVmlldy5rZXlbcGtleUluZGV4XVtwYXJ0aXRpb25JbmRleF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICghb3V0cHV0TVZpZXcuc2VsZWN0LmluY2x1ZGVzKG91dHB1dE1WaWV3LmtleVtwa2V5SW5kZXhdKSkge1xuICAgICAgICAgIG91dHB1dE1WaWV3LnNlbGVjdC5wdXNoKG91dHB1dE1WaWV3LmtleVtwa2V5SW5kZXhdKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBjaGVjayBpZiBzZWxlY3QgaGFzICogYW5kIHRoZW4gYWRkIGFsbCBmaWVsZHMgdG8gc2VsZWN0XG4gICAgICBpZiAob3V0cHV0TVZpZXcuc2VsZWN0WzBdID09PSAnKicpIHtcbiAgICAgICAgb3V0cHV0TVZpZXcuc2VsZWN0ID0gT2JqZWN0LmtleXMob3V0cHV0U2NoZW1hLmZpZWxkcyk7XG4gICAgICB9XG5cbiAgICAgIG91dHB1dE1WaWV3LnNlbGVjdC5zb3J0KGFycmF5U29ydCk7XG5cbiAgICAgIGlmICghb3V0cHV0TVZpZXcud2hlcmVfY2xhdXNlKSB7XG4gICAgICAgIG91dHB1dE1WaWV3LndoZXJlX2NsYXVzZSA9IHBhcnNlci5nZXRfbXZpZXdfd2hlcmVfY2xhdXNlKG91dHB1dFNjaGVtYSwgb3V0cHV0TVZpZXcpLnRyaW0oKTtcbiAgICAgIH1cbiAgICAgIGlmIChfLmlzUGxhaW5PYmplY3Qob3V0cHV0TVZpZXcuZmlsdGVycykpIHtcbiAgICAgICAgZGVsZXRlIG91dHB1dE1WaWV3LmZpbHRlcnM7XG4gICAgICB9XG4gICAgfSk7XG4gIH0sXG5cbiAgbm9ybWFsaXplX2luZGV4ZXMob3V0cHV0U2NoZW1hKSB7XG4gICAgaWYgKCFvdXRwdXRTY2hlbWEuaW5kZXhlcykge1xuICAgICAgb3V0cHV0U2NoZW1hLmluZGV4ZXMgPSBbXTtcbiAgICB9XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvdXRwdXRTY2hlbWEuaW5kZXhlcy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgaW5kZXhOYW1lTGlzdCA9IG91dHB1dFNjaGVtYS5pbmRleGVzW2ldLnJlcGxhY2UoL1tcIlxcc10vZywgJycpLnNwbGl0KC9bKCldL2cpO1xuICAgICAgaWYgKGluZGV4TmFtZUxpc3QubGVuZ3RoID4gMSkge1xuICAgICAgICBpbmRleE5hbWVMaXN0WzBdID0gaW5kZXhOYW1lTGlzdFswXS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBpZiAoaW5kZXhOYW1lTGlzdFswXSA9PT0gJ3ZhbHVlcycpIG91dHB1dFNjaGVtYS5pbmRleGVzW2ldID0gaW5kZXhOYW1lTGlzdFsxXTtcbiAgICAgICAgZWxzZSBvdXRwdXRTY2hlbWEuaW5kZXhlc1tpXSA9IHV0aWwuZm9ybWF0KCclcyglcyknLCBpbmRleE5hbWVMaXN0WzBdLCBpbmRleE5hbWVMaXN0WzFdKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG91dHB1dFNjaGVtYS5pbmRleGVzW2ldID0gaW5kZXhOYW1lTGlzdFswXTtcbiAgICAgIH1cbiAgICB9XG4gICAgb3V0cHV0U2NoZW1hLmluZGV4ZXMuc29ydChhcnJheVNvcnQpO1xuICB9LFxuXG4gIG5vcm1hbGl6ZV9jdXN0b21faW5kZXhlcyhvdXRwdXRTY2hlbWEpIHtcbiAgICBpZiAob3V0cHV0U2NoZW1hLmN1c3RvbV9pbmRleCkge1xuICAgICAgb3V0cHV0U2NoZW1hLmN1c3RvbV9pbmRleGVzID0gW291dHB1dFNjaGVtYS5jdXN0b21faW5kZXhdO1xuICAgICAgZGVsZXRlIG91dHB1dFNjaGVtYS5jdXN0b21faW5kZXg7XG4gICAgfVxuXG4gICAgaWYgKG91dHB1dFNjaGVtYS5jdXN0b21faW5kZXhlcykge1xuICAgICAgY29uc3QgY3VzdG9tQXJyYXlTb3J0ID0gKGEsIGIpID0+IHtcbiAgICAgICAgaWYgKGEub24gPiBiLm9uKSByZXR1cm4gMTtcbiAgICAgICAgaWYgKGEub24gPCBiLm9uKSByZXR1cm4gLTE7XG5cbiAgICAgICAgaWYgKGEudXNpbmcgPiBiLnVzaW5nKSByZXR1cm4gMTtcbiAgICAgICAgaWYgKGEudXNpbmcgPCBiLnVzaW5nKSByZXR1cm4gLTE7XG5cbiAgICAgICAgaWYgKGEub3B0aW9ucyA+IGIub3B0aW9ucykgcmV0dXJuIDE7XG4gICAgICAgIGlmIChhLm9wdGlvbnMgPCBiLm9wdGlvbnMpIHJldHVybiAtMTtcblxuICAgICAgICByZXR1cm4gMDtcbiAgICAgIH07XG5cbiAgICAgIG91dHB1dFNjaGVtYS5jdXN0b21faW5kZXhlcy5zb3J0KGN1c3RvbUFycmF5U29ydCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG91dHB1dFNjaGVtYS5jdXN0b21faW5kZXhlcyA9IFtdO1xuICAgIH1cblxuICAgIG91dHB1dFNjaGVtYS5jdXN0b21faW5kZXhlcyA9IF8ucmVtb3ZlKG91dHB1dFNjaGVtYS5jdXN0b21faW5kZXhlcywgKGNpbmRleCkgPT4gKGNpbmRleC5vbiAhPT0gJ3NvbHJfcXVlcnknKSk7XG4gIH0sXG5cbiAgbm9ybWFsaXplX21vZGVsX3NjaGVtYShtb2RlbFNjaGVtYSkge1xuICAgIGNvbnN0IG91dHB1dFNjaGVtYSA9IF8uY2xvbmVEZWVwKG1vZGVsU2NoZW1hLCB0cnVlKTtcbiAgICBjb25zdCBub3JtYWxpemFibGVTY2hlbWFQcm9wZXJ0aWVzID0gW1xuICAgICAgJ2ZpZWxkcycsICdrZXknLCAnY2x1c3RlcmluZ19vcmRlcicsICdtYXRlcmlhbGl6ZWRfdmlld3MnLCAnaW5kZXhlcycsICdjdXN0b21faW5kZXgnLCAnY3VzdG9tX2luZGV4ZXMnLFxuICAgIF07XG5cbiAgICBPYmplY3Qua2V5cyhvdXRwdXRTY2hlbWEpLmZvckVhY2goKHNjaGVtYVByb3BlcnR5KSA9PiB7XG4gICAgICBpZiAoIW5vcm1hbGl6YWJsZVNjaGVtYVByb3BlcnRpZXMuaW5jbHVkZXMoc2NoZW1hUHJvcGVydHkpKSB7XG4gICAgICAgIGRlbGV0ZSBvdXRwdXRTY2hlbWFbc2NoZW1hUHJvcGVydHldO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy5ub3JtYWxpemVfZmllbGRzKG1vZGVsU2NoZW1hLCBvdXRwdXRTY2hlbWEpO1xuICAgIHRoaXMubm9ybWFsaXplX3ByaW1hcnlfa2V5KG91dHB1dFNjaGVtYSk7XG4gICAgdGhpcy5ub3JtYWxpemVfbWF0ZXJpYWxpemVkX3ZpZXdzKG91dHB1dFNjaGVtYSk7XG4gICAgdGhpcy5ub3JtYWxpemVfaW5kZXhlcyhvdXRwdXRTY2hlbWEpO1xuICAgIHRoaXMubm9ybWFsaXplX2N1c3RvbV9pbmRleGVzKG91dHB1dFNjaGVtYSk7XG5cbiAgICByZXR1cm4gb3V0cHV0U2NoZW1hO1xuICB9LFxuXG4gIHJlbW92ZV9kZXBlbmRlbnRfdmlld3NfZnJvbV9ub3JtYWxpemVkX3NjaGVtYShub3JtYWxpemVkREJTY2hlbWEsIGRiU2NoZW1hLCBmaWVsZE5hbWUpIHtcbiAgICBjb25zdCBkZXBlbmRlbnRWaWV3cyA9IFtdO1xuICAgIE9iamVjdC5rZXlzKG5vcm1hbGl6ZWREQlNjaGVtYS5tYXRlcmlhbGl6ZWRfdmlld3MpLmZvckVhY2goKGRiVmlld05hbWUpID0+IHtcbiAgICAgIGlmIChub3JtYWxpemVkREJTY2hlbWEubWF0ZXJpYWxpemVkX3ZpZXdzW2RiVmlld05hbWVdLnNlbGVjdC5pbmNsdWRlcyhmaWVsZE5hbWUpKSB7XG4gICAgICAgIGRlcGVuZGVudFZpZXdzLnB1c2goZGJWaWV3TmFtZSk7XG4gICAgICB9IGVsc2UgaWYgKG5vcm1hbGl6ZWREQlNjaGVtYS5tYXRlcmlhbGl6ZWRfdmlld3NbZGJWaWV3TmFtZV0uc2VsZWN0WzBdID09PSAnKicpIHtcbiAgICAgICAgZGVwZW5kZW50Vmlld3MucHVzaChkYlZpZXdOYW1lKTtcbiAgICAgIH0gZWxzZSBpZiAobm9ybWFsaXplZERCU2NoZW1hLm1hdGVyaWFsaXplZF92aWV3c1tkYlZpZXdOYW1lXS5rZXkuaW5jbHVkZXMoZmllbGROYW1lKSkge1xuICAgICAgICBkZXBlbmRlbnRWaWV3cy5wdXNoKGRiVmlld05hbWUpO1xuICAgICAgfSBlbHNlIGlmIChfLmlzQXJyYXkobm9ybWFsaXplZERCU2NoZW1hLm1hdGVyaWFsaXplZF92aWV3c1tkYlZpZXdOYW1lXS5rZXlbMF0pXG4gICAgICAgICAgICAgICAgICAmJiBub3JtYWxpemVkREJTY2hlbWEubWF0ZXJpYWxpemVkX3ZpZXdzW2RiVmlld05hbWVdLmtleVswXS5pbmNsdWRlcyhmaWVsZE5hbWUpKSB7XG4gICAgICAgIGRlcGVuZGVudFZpZXdzLnB1c2goZGJWaWV3TmFtZSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgZGVwZW5kZW50Vmlld3MuZm9yRWFjaCgodmlld05hbWUpID0+IHtcbiAgICAgIG5vcm1hbGl6ZWREQlNjaGVtYS5tYXRlcmlhbGl6ZWRfdmlld3Nbdmlld05hbWVdID0ge307XG4gICAgfSk7XG4gIH0sXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IG5vcm1hbGl6ZXI7XG4iXX0=
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9ub3JtYWxpemVyLmpzIl0sIm5hbWVzIjpbIl8iLCJyZXF1aXJlIiwidXRpbCIsInBhcnNlciIsImFycmF5U29ydCIsImEiLCJiIiwibm9ybWFsaXplVHlwZURlZiIsInR5cGVEZWYiLCJmb3JtYXR0ZWRUeXBlRGVmIiwicmVwbGFjZSIsImZyb3plbk1hdGNoIiwibWF0Y2giLCJsZW5ndGgiLCJzbGljZSIsIm5vcm1hbGl6ZXIiLCJub3JtYWxpemVfcmVwbGljYXRpb25fb3B0aW9uIiwicmVwbGljYXRpb25PcHRpb25zIiwibm9ybWFsaXplZFJlcGxpY2F0aW9uT3B0aW9ucyIsIk9iamVjdCIsImtleXMiLCJmb3JFYWNoIiwia2V5IiwicGFyc2VJbnQiLCJub3JtYWxpemVfcXVlcnlfb3B0aW9uIiwib3B0aW9ucyIsInF1ZXJ5T3B0aW9ucyIsInByZXBhcmUiLCJjb25zaXN0ZW5jeSIsImZldGNoU2l6ZSIsImF1dG9QYWdlIiwiaGludHMiLCJwYWdlU3RhdGUiLCJyZXRyeSIsInNlcmlhbENvbnNpc3RlbmN5IiwiY3VzdG9tUGF5bG9hZCIsImlzSWRlbXBvdGVudCIsInJlYWRUaW1lb3V0IiwicmV0cnlPblRpbWVvdXQiLCJyb3V0aW5nSW5kZXhlcyIsInJvdXRpbmdLZXkiLCJyb3V0aW5nTmFtZXMiLCJ0aW1lc3RhbXAiLCJub3JtYWxpemVfdXNlcl9kZWZpbmVkX3R5cGUiLCJmaWVsZFR5cGUiLCJub3JtYWxpemVfcHJpbWFyeV9rZXkiLCJvdXRwdXRTY2hlbWEiLCJpIiwiY2x1c3RlcmluZ19vcmRlciIsInRvVXBwZXJDYXNlIiwibm9ybWFsaXplX2ZpZWxkcyIsIm1vZGVsU2NoZW1hIiwiZmllbGRzIiwiZmllbGROYW1lIiwidHlwZSIsInZpcnR1YWwiLCJpbmNsdWRlcyIsInR5cGVNYXBzIiwic3RhdGljTWFwcyIsInN0YXRpYyIsIm5vcm1hbGl6ZV9tYXRlcmlhbGl6ZWRfdmlld3MiLCJtYXRlcmlhbGl6ZWRfdmlld3MiLCJtYXRlcmlhbGl6ZWRWaWV3TmFtZSIsIm91dHB1dE1WaWV3IiwicGtleUluZGV4IiwicGFydGl0aW9uSW5kZXgiLCJzZWxlY3QiLCJwdXNoIiwic29ydCIsIndoZXJlX2NsYXVzZSIsImdldF9tdmlld193aGVyZV9jbGF1c2UiLCJ0cmltIiwiaXNQbGFpbk9iamVjdCIsImZpbHRlcnMiLCJub3JtYWxpemVfaW5kZXhlcyIsImluZGV4ZXMiLCJpbmRleE5hbWVMaXN0Iiwic3BsaXQiLCJ0b0xvd2VyQ2FzZSIsImZvcm1hdCIsIm5vcm1hbGl6ZV9jdXN0b21faW5kZXhlcyIsImN1c3RvbV9pbmRleCIsImN1c3RvbV9pbmRleGVzIiwiY3VzdG9tQXJyYXlTb3J0Iiwib24iLCJ1c2luZyIsInJlbW92ZSIsImNpbmRleCIsIm5vcm1hbGl6ZV9tb2RlbF9zY2hlbWEiLCJjbG9uZURlZXAiLCJub3JtYWxpemFibGVTY2hlbWFQcm9wZXJ0aWVzIiwic2NoZW1hUHJvcGVydHkiLCJyZW1vdmVfZGVwZW5kZW50X3ZpZXdzX2Zyb21fbm9ybWFsaXplZF9zY2hlbWEiLCJub3JtYWxpemVkREJTY2hlbWEiLCJkYlNjaGVtYSIsImRlcGVuZGVudFZpZXdzIiwiZGJWaWV3TmFtZSIsImlzQXJyYXkiLCJ2aWV3TmFtZSIsIm1vZHVsZSIsImV4cG9ydHMiXSwibWFwcGluZ3MiOiI7O0FBQUEsSUFBTUEsSUFBSUMsUUFBUSxRQUFSLENBQVY7QUFDQSxJQUFNQyxPQUFPRCxRQUFRLE1BQVIsQ0FBYjs7QUFFQSxJQUFNRSxTQUFTRixRQUFRLFVBQVIsQ0FBZjs7QUFFQSxJQUFNRyxZQUFZLFNBQVpBLFNBQVksQ0FBQ0MsQ0FBRCxFQUFJQyxDQUFKLEVBQVU7QUFDMUIsTUFBSUQsSUFBSUMsQ0FBUixFQUFXLE9BQU8sQ0FBUDtBQUNYLE1BQUlELElBQUlDLENBQVIsRUFBVyxPQUFPLENBQUMsQ0FBUjtBQUNYLFNBQU8sQ0FBUDtBQUNELENBSkQ7O0FBTUEsSUFBTUMsbUJBQW1CLFNBQW5CQSxnQkFBbUIsQ0FBQ0MsT0FBRCxF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Q0FBVUosbUJBQW1CaEMsa0JBQW5CLENBQXNDbUMsVUFBdEMsRUFBa0QxRSxHQUFsRCxDQUFzRCxDQUF0RCxDQUFWLEtBQ0l1RSxtQkFBbUJoQyxrQkFBbkIsQ0FBc0NtQyxVQUF0QyxFQUFrRDFFLEdBQWxELENBQXNELENBQXRELEVBQXlEa0MsUUFBekQsQ0FBa0VILFNBQWxFLENBRFIsRUFDc0Y7QUFDM0YwQyx1QkFBZTVCLElBQWYsQ0FBb0I2QixVQUFwQjtBQUNEO0FBQ0YsS0FYRDtBQVlBRCxtQkFBZTFFLE9BQWYsQ0FBdUIsVUFBQzZFLFFBQUQsRUFBYztBQUNuQ0wseUJBQW1CaEMsa0JBQW5CLENBQXNDcUMsUUFBdEMsSUFBa0QsRUFBbEQ7QUFDRCxLQUZEO0FBR0Q7QUE3T2dCLENBQW5COztBQWdQQUMsT0FBT0MsT0FBUCxHQUFpQnJGLFVBQWpCIiwiZmlsZSI6Im5vcm1hbGl6ZXIuanMiLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCBfID0gcmVxdWlyZSgnbG9kYXNoJyk7XG5jb25zdCB1dGlsID0gcmVxdWlyZSgndXRpbCcpO1xuXG5jb25zdCBwYXJzZXIgPSByZXF1aXJlKCcuL3BhcnNlcicpO1xuXG5jb25zdCBhcnJheVNvcnQgPSAoYSwgYikgPT4ge1xuICBpZiAoYSA+IGIpIHJldHVybiAxO1xuICBpZiAoYSA8IGIpIHJldHVybiAtMTtcbiAgcmV0dXJuIDA7XG59O1xuXG5jb25zdCBub3JtYWxpemVUeXBlRGVmID0gKHR5cGVEZWYpID0+IHtcbiAgY29uc3QgZm9ybWF0dGVkVHlwZURlZiA9IHR5cGVEZWYucmVwbGFjZSgvW1xcc10vZywgJycpLnJlcGxhY2UoL3ZhcmNoYXIvZywgJ3RleHQnKS5yZXBsYWNlKC9mcm96ZW4vaWcsICdmcm96ZW4nKTtcbiAgY29uc3QgZnJvemVuTWF0Y2ggPSBmb3JtYXR0ZWRUeXBlRGVmLm1hdGNoKC9mcm96ZW48L2cpO1xuICBpZiAoZnJvemVuTWF0Y2ggJiYgZnJvemVuTWF0Y2gubGVuZ3RoKSByZXR1cm4gZm9ybWF0dGVkVHlwZURlZi5yZXBsYWNlKC9mcm96ZW48L2csICcnKS5zbGljZSgwLCAtMSAqIGZyb3plbk1hdGNoLmxlbmd0aCk7XG4gIHJldHVybiBmb3JtYXR0ZWRUeXBlRGVmO1xufTtcblxuY29uc3Qgbm9ybWFsaXplciA9IHtcbiAgbm9ybWFsaXplX3JlcGxpY2F0aW9uX29wdGlvbihyZXBsaWNhdGlvbk9wdGlvbnMpIHtcbiAgICBjb25zdCBub3JtYWxpemVkUmVwbGljYXRpb25PcHRpb25zID0gcmVwbGljYXRpb25PcHRpb25zO1xuICAgIE9iamVjdC5rZXlzKG5vcm1hbGl6ZWRSZXBsaWNhdGlvbk9wdGlvbnMpLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgaWYgKGtleSA9PT0gJ2NsYXNzJykge1xuICAgICAgICBub3JtYWxpemVkUmVwbGljYXRpb25PcHRpb25zW2tleV0gPSBub3JtYWxpemVkUmVwbGljYXRpb25PcHRpb25zW2tleV0ucmVwbGFjZSgnb3JnLmFwYWNoZS5jYXNzYW5kcmEubG9jYXRvci4nLCAnJyk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIG5vcm1hbGl6ZWRSZXBsaWNhdGlvbk9wdGlvbnNba2V5XSA9IHBhcnNlSW50KG5vcm1hbGl6ZWRSZXBsaWNhdGlvbk9wdGlvbnNba2V5XSwgMTApO1xuICAgIH0pO1xuICAgIHJldHVybiBub3JtYWxpemVkUmVwbGljYXRpb25PcHRpb25zO1xuICB9LFxuXG4gIG5vcm1hbGl6ZV9xdWVyeV9vcHRpb24ob3B0aW9ucykge1xuICAgIGNvbnN0IHF1ZXJ5T3B0aW9ucyA9IHsgcHJlcGFyZTogb3B0aW9ucy5wcmVwYXJlIH07XG4gICAgaWYgKG9wdGlvbnMuY29uc2lzdGVuY3kpIHF1ZXJ5T3B0aW9ucy5jb25zaXN0ZW5jeSA9IG9wdGlvbnMuY29uc2lzdGVuY3k7XG4gICAgaWYgKG9wdGlvbnMuZmV0Y2hTaXplKSBxdWVyeU9wdGlvbnMuZmV0Y2hTaXplID0gb3B0aW9ucy5mZXRjaFNpemU7XG4gICAgaWYgKG9wdGlvbnMuYXV0b1BhZ2UpIHF1ZXJ5T3B0aW9ucy5hdXRvUGFnZSA9IG9wdGlvbnMuYXV0b1BhZ2U7XG4gICAgaWYgKG9wdGlvbnMuaGludHMpIHF1ZXJ5T3B0aW9ucy5oaW50cyA9IG9wdGlvbnMuaGludHM7XG4gICAgaWYgKG9wdGlvbnMucGFnZVN0YXRlKSBxdWVyeU9wdGlvbnMucGFnZVN0YXRlID0gb3B0aW9ucy5wYWdlU3RhdGU7XG4gICAgaWYgKG9wdGlvbnMucmV0cnkpIHF1ZXJ5T3B0aW9ucy5yZXRyeSA9IG9wdGlvbnMucmV0cnk7XG4gICAgaWYgKG9wdGlvbnMuc2VyaWFsQ29uc2lzdGVuY3kpIHF1ZXJ5T3B0aW9ucy5zZXJpYWxDb25zaXN0ZW5jeSA9IG9wdGlvbnMuc2VyaWFsQ29uc2lzdGVuY3k7XG4gICAgaWYgKG9wdGlvbnMuY3VzdG9tUGF5bG9hZCkgcXVlcnlPcHRpb25zLmN1c3RvbVBheWxvYWQgPSBvcHRpb25zLmN1c3RvbVBheWxvYWQ7XG4gICAgaWYgKG9wdGlvbnMuaXNJZGVtcG90ZW50KSBxdWVyeU9wdGlvbnMuaXNJZGVtcG90ZW50ID0gb3B0aW9ucy5pc0lkZW1wb3RlbnQ7XG4gICAgaWYgKG9wdGlvbnMucmVhZFRpbWVvdXQpIHF1ZXJ5T3B0aW9ucy5yZWFkVGltZW91dCA9IG9wdGlvbnMucmVhZFRpbWVvdXQ7XG4gICAgaWYgKG9wdGlvbnMucmV0cnkpIHF1ZXJ5T3B0aW9ucy5yZXRyeSA9IG9wdGlvbnMucmV0cnk7XG4gICAgaWYgKG9wdGlvbnMucmV0cnlPblRpbWVvdXQpIHF1ZXJ5T3B0aW9ucy5yZXRyeU9uVGltZW91dCA9IG9wdGlvbnMucmV0cnlPblRpbWVvdXQ7XG4gICAgaWYgKG9wdGlvbnMucm91dGluZ0luZGV4ZXMpIHF1ZXJ5T3B0aW9ucy5yb3V0aW5nSW5kZXhlcyA9IG9wdGlvbnMucm91dGluZ0luZGV4ZXM7XG4gICAgaWYgKG9wdGlvbnMucm91dGluZ0tleSkgcXVlcnlPcHRpb25zLnJvdXRpbmdLZXkgPSBvcHRpb25zLnJvdXRpbmdLZXk7XG4gICAgaWYgKG9wdGlvbnMucm91dGluZ05hbWVzKSBxdWVyeU9wdGlvbnMucm91dGluZ05hbWVzID0gb3B0aW9ucy5yb3V0aW5nTmFtZXM7XG4gICAgaWYgKG9wdGlvbnMudGltZXN0YW1wKSBxdWVyeU9wdGlvbnMudGltZXN0YW1wID0gb3B0aW9ucy50aW1lc3RhbXA7XG4gICAgcmV0dXJuIHF1ZXJ5T3B0aW9ucztcbiAgfSxcblxuICBub3JtYWxpemVfdXNlcl9kZWZpbmVkX3R5cGUoZmllbGRUeXBlKSB7XG4gICAgcmV0dXJuIG5vcm1hbGl6ZVR5cGVEZWYoZmllbGRUeXBlKTtcbiAgfSxcblxuICBub3JtYWxpemVfcHJpbWFyeV9rZXkob3V0cHV0U2NoZW1hKSB7XG4gICAgaWYgKG91dHB1dFNjaGVtYS5rZXkgJiYgdHlwZW9mIG91dHB1dFNjaGVtYS5rZXlbMF0gPT09ICdzdHJpbmcnKSB7XG4gICAgICBvdXRwdXRTY2hlbWEua2V5WzBdID0gW291dHB1dFNjaGVtYS5rZXlbMF1dO1xuICAgIH1cblxuICAgIGlmIChvdXRwdXRTY2hlbWEua2V5ICYmIG91dHB1dFNjaGVtYS5rZXkubGVuZ3RoKSB7XG4gICAgICBmb3IgKGxldCBpID0gMTsgaSA8IG91dHB1dFNjaGVtYS5rZXkubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKCFvdXRwdXRTY2hlbWEuY2x1c3RlcmluZ19vcmRlcikgb3V0cHV0U2NoZW1hLmNsdXN0ZXJpbmdfb3JkZXIgPSB7fTtcbiAgICAgICAgaWYgKCFvdXRwdXRTY2hlbWEuY2x1c3RlcmluZ19vcmRlcltvdXRwdXRTY2hlbWEua2V5W2ldXSkge1xuICAgICAgICAgIG91dHB1dFNjaGVtYS5jbHVzdGVyaW5nX29yZGVyW291dHB1dFNjaGVtYS5rZXlbaV1dID0gJ0FTQyc7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbWF4LWxlblxuICAgICAgICBvdXRwdXRTY2hlbWEuY2x1c3RlcmluZ19vcmRlcltvdXRwdXRTY2hlbWEua2V5W2ldXSA9IG91dHB1dFNjaGVtYS5jbHVzdGVyaW5nX29yZGVyW291dHB1dFNjaGVtYS5rZXlbaV1dLnRvVXBwZXJDYXNlKCk7XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG5vcm1hbGl6ZV9maWVsZHMobW9kZWxTY2hlbWEsIG91dHB1dFNjaGVtYSkge1xuICAgIE9iamVjdC5rZXlzKG91dHB1dFNjaGVtYS5maWVsZHMpLmZvckVhY2goKGZpZWxkTmFtZSkgPT4ge1xuICAgICAgaWYgKHR5cGVvZiAob3V0cHV0U2NoZW1hLmZpZWxkc1tmaWVsZE5hbWVdKSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgb3V0cHV0U2NoZW1hLmZpZWxkc1tmaWVsZE5hbWVdID0geyB0eXBlOiBvdXRwdXRTY2hlbWEuZmllbGRzW2ZpZWxkTmFtZV0gfTtcbiAgICAgIH1cblxuICAgICAgaWYgKGZpZWxkTmFtZSA9PT0gJ3NvbHJfcXVlcnknIHx8IG91dHB1dFNjaGVtYS5maWVsZHNbZmllbGROYW1lXS52aXJ0dWFsKSB7XG4gICAgICAgIGRlbGV0ZSBvdXRwdXRTY2hlbWEuZmllbGRzW2ZpZWxkTmFtZV07XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKG91dHB1dFNjaGVtYS5maWVsZHNbZmllbGROYW1lXS50eXBlRGVmKSB7XG4gICAgICAgIG91dHB1dFNjaGVtYS5maWVsZHNbZmllbGROYW1lXSA9IHtcbiAgICAgICAgICB0eXBlOiBvdXRwdXRTY2hlbWEuZmllbGRzW2ZpZWxkTmFtZV0udHlwZSxcbiAgICAgICAgICB0eXBlRGVmOiBvdXRwdXRTY2hlbWEuZmllbGRzW2ZpZWxkTmFtZV0udHlwZURlZixcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG91dHB1dFNjaGVtYS5maWVsZHNbZmllbGROYW1lXSA9IHsgdHlwZTogb3V0cHV0U2NoZW1hLmZpZWxkc1tmaWVsZE5hbWVdLnR5cGUgfTtcbiAgICAgIH1cblxuICAgICAgaWYgKG91dHB1dFNjaGVtYS5maWVsZHNbZmllbGROYW1lXS50eXBlID09PSAndmFyY2hhcicpIHtcbiAgICAgICAgb3V0cHV0U2NoZW1hLmZpZWxkc1tmaWVsZE5hbWVdLnR5cGUgPSAndGV4dCc7XG4gICAgICB9XG5cbiAgICAgIGlmIChbJ21hcCcsICdsaXN0JywgJ3NldCcsICdmcm96ZW4nXS5pbmNsdWRlcyhvdXRwdXRTY2hlbWEuZmllbGRzW2ZpZWxkTmFtZV0udHlwZSkpIHtcbiAgICAgICAgaWYgKG1vZGVsU2NoZW1hLnR5cGVNYXBzICYmIG1vZGVsU2NoZW1hLnR5cGVNYXBzW2ZpZWxkTmFtZV0pIHtcbiAgICAgICAgICBvdXRwdXRTY2hlbWEuZmllbGRzW2ZpZWxkTmFtZV0udHlwZURlZiA9IG5vcm1hbGl6ZVR5cGVEZWYobW9kZWxTY2hlbWEudHlwZU1hcHNbZmllbGROYW1lXSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb3V0cHV0U2NoZW1hLmZpZWxkc1tmaWVsZE5hbWVdLnR5cGVEZWYgPSBub3JtYWxpemVUeXBlRGVmKG91dHB1dFNjaGVtYS5maWVsZHNbZmllbGROYW1lXS50eXBlRGVmKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAobW9kZWxTY2hlbWEuc3RhdGljTWFwcyAmJiBtb2RlbFNjaGVtYS5zdGF0aWNNYXBzW2ZpZWxkTmFtZV0gPT09IHRydWUpIHtcbiAgICAgICAgb3V0cHV0U2NoZW1hLmZpZWxkc1tmaWVsZE5hbWVdLnN0YXRpYyA9IHRydWU7XG4gICAgICB9IGVsc2UgaWYgKG1vZGVsU2NoZW1hLmZpZWxkc1tmaWVsZE5hbWVdLnN0YXRpYykge1xuICAgICAgICBvdXRwdXRTY2hlbWEuZmllbGRzW2ZpZWxkTmFtZV0uc3RhdGljID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSxcblxuICBub3JtYWxpemVfbWF0ZXJpYWxpemVkX3ZpZXdzKG91dHB1dFNjaGVtYSkge1xuICAgIGlmICghb3V0cHV0U2NoZW1hLm1hdGVyaWFsaXplZF92aWV3cykge1xuICAgICAgb3V0cHV0U2NoZW1hLm1hdGVyaWFsaXplZF92aWV3cyA9IHt9O1xuICAgIH1cblxuICAgIE9iamVjdC5rZXlzKG91dHB1dFNjaGVtYS5tYXRlcmlhbGl6ZWRfdmlld3MpLmZvckVhY2goKG1hdGVyaWFsaXplZFZpZXdOYW1lKSA9PiB7XG4gICAgICBjb25zdCBvdXRwdXRNVmlldyA9IG91dHB1dFNjaGVtYS5tYXRlcmlhbGl6ZWRfdmlld3NbbWF0ZXJpYWxpemVkVmlld05hbWVdO1xuICAgICAgLy8gbWFrZSBwYXJpdGlvbiBrZXkgYW4gYXJyYXlcbiAgICAgIGlmIChvdXRwdXRNVmlldy5rZXkgJiYgdHlwZW9mIG91dHB1dE1WaWV3LmtleVswXSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgb3V0cHV0TVZpZXcua2V5WzBdID0gW291dHB1dE1WaWV3LmtleVswXV07XG4gICAgICB9XG5cbiAgICAgIC8vIGFkZCBjbHVzdGVyaW5nX29yZGVyIGZvciBhbGwgY2x1c3RlcmluZyBrZXlzXG4gICAgICBpZiAob3V0cHV0TVZpZXcua2V5ICYmIG91dHB1dE1WaWV3LmtleS5sZW5ndGgpIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPCBvdXRwdXRNVmlldy5rZXkubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBpZiAoIW91dHB1dE1WaWV3LmNsdXN0ZXJpbmdfb3JkZXIpIHtcbiAgICAgICAgICAgIG91dHB1dE1WaWV3LmNsdXN0ZXJpbmdfb3JkZXIgPSB7fTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCFvdXRwdXRNVmlldy5jbHVzdGVyaW5nX29yZGVyW291dHB1dE1WaWV3LmtleVtpXV0pIHtcbiAgICAgICAgICAgIG91dHB1dE1WaWV3LmNsdXN0ZXJpbmdfb3JkZXJbb3V0cHV0TVZpZXcua2V5W2ldXSA9ICdBU0MnO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbWF4LWxlblxuICAgICAgICAgIG91dHB1dE1WaWV3LmNsdXN0ZXJpbmdfb3JkZXJbb3V0cHV0TVZpZXcua2V5W2ldXSA9IG91dHB1dE1WaWV3LmNsdXN0ZXJpbmdfb3JkZXJbb3V0cHV0TVZpZXcua2V5W2ldXS50b1VwcGVyQ2FzZSgpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIGFkZCBhbGwgbm9uIGV4aXN0ZW50IHByaW1hcnkga2V5IGl0ZW1zIHRvIHNlbGVjdCBhbmQgc29ydCB0aGVtXG4gICAgICBmb3IgKGxldCBwa2V5SW5kZXggPSAwOyBwa2V5SW5kZXggPCBvdXRwdXRNVmlldy5rZXkubGVuZ3RoOyBwa2V5SW5kZXgrKykge1xuICAgICAgICBpZiAocGtleUluZGV4ID09PSAwKSB7XG4gICAgICAgICAgZm9yIChsZXQgcGFydGl0aW9uSW5kZXggPSAwOyBwYXJ0aXRpb25JbmRleCA8IG91dHB1dE1WaWV3LmtleVtwa2V5SW5kZXhdLmxlbmd0aDsgcGFydGl0aW9uSW5kZXgrKykge1xuICAgICAgICAgICAgaWYgKCFvdXRwdXRNVmlldy5zZWxlY3QuaW5jbHVkZXMob3V0cHV0TVZpZXcua2V5W3BrZXlJbmRleF1bcGFydGl0aW9uSW5kZXhdKSkge1xuICAgICAgICAgICAgICBvdXRwdXRNVmlldy5zZWxlY3QucHVzaChvdXRwdXRNVmlldy5rZXlbcGtleUluZGV4XVtwYXJ0aXRpb25JbmRleF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICghb3V0cHV0TVZpZXcuc2VsZWN0LmluY2x1ZGVzKG91dHB1dE1WaWV3LmtleVtwa2V5SW5kZXhdKSkge1xuICAgICAgICAgIG91dHB1dE1WaWV3LnNlbGVjdC5wdXNoKG91dHB1dE1WaWV3LmtleVtwa2V5SW5kZXhdKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBjaGVjayBpZiBzZWxlY3QgaGFzICogYW5kIHRoZW4gYWRkIGFsbCBmaWVsZHMgdG8gc2VsZWN0XG4gICAgICBpZiAob3V0cHV0TVZpZXcuc2VsZWN0WzBdID09PSAnKicpIHtcbiAgICAgICAgb3V0cHV0TVZpZXcuc2VsZWN0ID0gT2JqZWN0LmtleXMob3V0cHV0U2NoZW1hLmZpZWxkcyk7XG4gICAgICB9XG5cbiAgICAgIG91dHB1dE1WaWV3LnNlbGVjdC5zb3J0KGFycmF5U29ydCk7XG5cbiAgICAgIGlmICghb3V0cHV0TVZpZXcud2hlcmVfY2xhdXNlKSB7XG4gICAgICAgIG91dHB1dE1WaWV3LndoZXJlX2NsYXVzZSA9IHBhcnNlci5nZXRfbXZpZXdfd2hlcmVfY2xhdXNlKG91dHB1dFNjaGVtYSwgb3V0cHV0TVZpZXcpLnRyaW0oKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIHNvbWUgdmVyc2lvbnMgb2YgY2Fzc2FuZHJhL3NjeWxsYSByZXR1cm4gSVMgTk9UIG51bGwgaW5zdGVhZCBvZiBJUyBOT1QgTlVMTFxuICAgICAgICBvdXRwdXRNVmlldy53aGVyZV9jbGF1c2UgPSBvdXRwdXRNVmlldy53aGVyZV9jbGF1c2UucmVwbGFjZSgvSVMgTk9UIG51bGwvZywgJ0lTIE5PVCBOVUxMJyk7XG4gICAgICB9XG4gICAgICBpZiAoXy5pc1BsYWluT2JqZWN0KG91dHB1dE1WaWV3LmZpbHRlcnMpKSB7XG4gICAgICAgIGRlbGV0ZSBvdXRwdXRNVmlldy5maWx0ZXJzO1xuICAgICAgfVxuICAgIH0pO1xuICB9LFxuXG4gIG5vcm1hbGl6ZV9pbmRleGVzKG91dHB1dFNjaGVtYSkge1xuICAgIGlmICghb3V0cHV0U2NoZW1hLmluZGV4ZXMpIHtcbiAgICAgIG91dHB1dFNjaGVtYS5pbmRleGVzID0gW107XG4gICAgfVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb3V0cHV0U2NoZW1hLmluZGV4ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGluZGV4TmFtZUxpc3QgPSBvdXRwdXRTY2hlbWEuaW5kZXhlc1tpXS5yZXBsYWNlKC9bXCJcXHNdL2csICcnKS5zcGxpdCgvWygpXS9nKTtcbiAgICAgIGlmIChpbmRleE5hbWVMaXN0Lmxlbmd0aCA+IDEpIHtcbiAgICAgICAgaW5kZXhOYW1lTGlzdFswXSA9IGluZGV4TmFtZUxpc3RbMF0udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgaWYgKGluZGV4TmFtZUxpc3RbMF0gPT09ICd2YWx1ZXMnKSBvdXRwdXRTY2hlbWEuaW5kZXhlc1tpXSA9IGluZGV4TmFtZUxpc3RbMV07XG4gICAgICAgIGVsc2Ugb3V0cHV0U2NoZW1hLmluZGV4ZXNbaV0gPSB1dGlsLmZvcm1hdCgnJXMoJXMpJywgaW5kZXhOYW1lTGlzdFswXSwgaW5kZXhOYW1lTGlzdFsxXSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvdXRwdXRTY2hlbWEuaW5kZXhlc1tpXSA9IGluZGV4TmFtZUxpc3RbMF07XG4gICAgICB9XG4gICAgfVxuICAgIG91dHB1dFNjaGVtYS5pbmRleGVzLnNvcnQoYXJyYXlTb3J0KTtcbiAgfSxcblxuICBub3JtYWxpemVfY3VzdG9tX2luZGV4ZXMob3V0cHV0U2NoZW1hKSB7XG4gICAgaWYgKG91dHB1dFNjaGVtYS5jdXN0b21faW5kZXgpIHtcbiAgICAgIG91dHB1dFNjaGVtYS5jdXN0b21faW5kZXhlcyA9IFtvdXRwdXRTY2hlbWEuY3VzdG9tX2luZGV4XTtcbiAgICAgIGRlbGV0ZSBvdXRwdXRTY2hlbWEuY3VzdG9tX2luZGV4O1xuICAgIH1cblxuICAgIGlmIChvdXRwdXRTY2hlbWEuY3VzdG9tX2luZGV4ZXMpIHtcbiAgICAgIGNvbnN0IGN1c3RvbUFycmF5U29ydCA9IChhLCBiKSA9PiB7XG4gICAgICAgIGlmIChhLm9uID4gYi5vbikgcmV0dXJuIDE7XG4gICAgICAgIGlmIChhLm9uIDwgYi5vbikgcmV0dXJuIC0xO1xuXG4gICAgICAgIGlmIChhLnVzaW5nID4gYi51c2luZykgcmV0dXJuIDE7XG4gICAgICAgIGlmIChhLnVzaW5nIDwgYi51c2luZykgcmV0dXJuIC0xO1xuXG4gICAgICAgIGlmIChhLm9wdGlvbnMgPiBiLm9wdGlvbnMpIHJldHVybiAxO1xuICAgICAgICBpZiAoYS5vcHRpb25zIDwgYi5vcHRpb25zKSByZXR1cm4gLTE7XG5cbiAgICAgICAgcmV0dXJuIDA7XG4gICAgICB9O1xuXG4gICAgICBvdXRwdXRTY2hlbWEuY3VzdG9tX2luZGV4ZXMuc29ydChjdXN0b21BcnJheVNvcnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBvdXRwdXRTY2hlbWEuY3VzdG9tX2luZGV4ZXMgPSBbXTtcbiAgICB9XG5cbiAgICBvdXRwdXRTY2hlbWEuY3VzdG9tX2luZGV4ZXMgPSBfLnJlbW92ZShvdXRwdXRTY2hlbWEuY3VzdG9tX2luZGV4ZXMsIChjaW5kZXgpID0+IChjaW5kZXgub24gIT09ICdzb2xyX3F1ZXJ5JykpO1xuICB9LFxuXG4gIG5vcm1hbGl6ZV9tb2RlbF9zY2hlbWEobW9kZWxTY2hlbWEpIHtcbiAgICBjb25zdCBvdXRwdXRTY2hlbWEgPSBfLmNsb25lRGVlcChtb2RlbFNjaGVtYSwgdHJ1ZSk7XG4gICAgY29uc3Qgbm9ybWFsaXphYmxlU2NoZW1hUHJvcGVydGllcyA9IFtcbiAgICAgICdmaWVsZHMnLCAna2V5JywgJ2NsdXN0ZXJpbmdfb3JkZXInLCAnbWF0ZXJpYWxpemVkX3ZpZXdzJywgJ2luZGV4ZXMnLCAnY3VzdG9tX2luZGV4JywgJ2N1c3RvbV9pbmRleGVzJyxcbiAgICBdO1xuXG4gICAgT2JqZWN0LmtleXMob3V0cHV0U2NoZW1hKS5mb3JFYWNoKChzY2hlbWFQcm9wZXJ0eSkgPT4ge1xuICAgICAgaWYgKCFub3JtYWxpemFibGVTY2hlbWFQcm9wZXJ0aWVzLmluY2x1ZGVzKHNjaGVtYVByb3BlcnR5KSkge1xuICAgICAgICBkZWxldGUgb3V0cHV0U2NoZW1hW3NjaGVtYVByb3BlcnR5XTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMubm9ybWFsaXplX2ZpZWxkcyhtb2RlbFNjaGVtYSwgb3V0cHV0U2NoZW1hKTtcbiAgICB0aGlzLm5vcm1hbGl6ZV9wcmltYXJ5X2tleShvdXRwdXRTY2hlbWEpO1xuICAgIHRoaXMubm9ybWFsaXplX21hdGVyaWFsaXplZF92aWV3cyhvdXRwdXRTY2hlbWEpO1xuICAgIHRoaXMubm9ybWFsaXplX2luZGV4ZXMob3V0cHV0U2NoZW1hKTtcbiAgICB0aGlzLm5vcm1hbGl6ZV9jdXN0b21faW5kZXhlcyhvdXRwdXRTY2hlbWEpO1xuXG4gICAgcmV0dXJuIG91dHB1dFNjaGVtYTtcbiAgfSxcblxuICByZW1vdmVfZGVwZW5kZW50X3ZpZXdzX2Zyb21fbm9ybWFsaXplZF9zY2hlbWEobm9ybWFsaXplZERCU2NoZW1hLCBkYlNjaGVtYSwgZmllbGROYW1lKSB7XG4gICAgY29uc3QgZGVwZW5kZW50Vmlld3MgPSBbXTtcbiAgICBPYmplY3Qua2V5cyhub3JtYWxpemVkREJTY2hlbWEubWF0ZXJpYWxpemVkX3ZpZXdzKS5mb3JFYWNoKChkYlZpZXdOYW1lKSA9PiB7XG4gICAgICBpZiAobm9ybWFsaXplZERCU2NoZW1hLm1hdGVyaWFsaXplZF92aWV3c1tkYlZpZXdOYW1lXS5zZWxlY3QuaW5jbHVkZXMoZmllbGROYW1lKSkge1xuICAgICAgICBkZXBlbmRlbnRWaWV3cy5wdXNoKGRiVmlld05hbWUpO1xuICAgICAgfSBlbHNlIGlmIChub3JtYWxpemVkREJTY2hlbWEubWF0ZXJpYWxpemVkX3ZpZXdzW2RiVmlld05hbWVdLnNlbGVjdFswXSA9PT0gJyonKSB7XG4gICAgICAgIGRlcGVuZGVudFZpZXdzLnB1c2goZGJWaWV3TmFtZSk7XG4gICAgICB9IGVsc2UgaWYgKG5vcm1hbGl6ZWREQlNjaGVtYS5tYXRlcmlhbGl6ZWRfdmlld3NbZGJWaWV3TmFtZV0ua2V5LmluY2x1ZGVzKGZpZWxkTmFtZSkpIHtcbiAgICAgICAgZGVwZW5kZW50Vmlld3MucHVzaChkYlZpZXdOYW1lKTtcbiAgICAgIH0gZWxzZSBpZiAoXy5pc0FycmF5KG5vcm1hbGl6ZWREQlNjaGVtYS5tYXRlcmlhbGl6ZWRfdmlld3NbZGJWaWV3TmFtZV0ua2V5WzBdKVxuICAgICAgICAgICAgICAgICAgJiYgbm9ybWFsaXplZERCU2NoZW1hLm1hdGVyaWFsaXplZF92aWV3c1tkYlZpZXdOYW1lXS5rZXlbMF0uaW5jbHVkZXMoZmllbGROYW1lKSkge1xuICAgICAgICBkZXBlbmRlbnRWaWV3cy5wdXNoKGRiVmlld05hbWUpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGRlcGVuZGVudFZpZXdzLmZvckVhY2goKHZpZXdOYW1lKSA9PiB7XG4gICAgICBub3JtYWxpemVkREJTY2hlbWEubWF0ZXJpYWxpemVkX3ZpZXdzW3ZpZXdOYW1lXSA9IHt9O1xuICAgIH0pO1xuICB9LFxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBub3JtYWxpemVyO1xuIl19

@@ -110,2 +110,2 @@ 'use strict';

module.exports = TYPE_MAP;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy92YWxpZGF0b3JzL2RhdGF0eXBlcy5qcyJdLCJuYW1lcyI6WyJQcm9taXNlIiwicmVxdWlyZSIsInV0aWwiLCJjaGVjayIsImRzZURyaXZlciIsImUiLCJjcWwiLCJwcm9taXNpZnlBbGwiLCJ2YWxpZGF0b3JzIiwiaXNfYXJyYXkiLCJvYmoiLCJhcnJheSIsImlzX29iamVjdCIsIm9iamVjdCIsImlzX2xvbmciLCJ0eXBlcyIsIkxvbmciLCJpc19kZWNpbWFsIiwiQmlnRGVjaW1hbCIsImlzX2ludGVnZXIiLCJpbnRlZ2VyIiwiaXNfdmFyX2ludCIsIkludGVnZXIiLCJpc19ib29sZWFuIiwiaXNfbnVtYmVyIiwibnVtYmVyIiwiaXNfc3RyaW5nIiwic3RyaW5nIiwiaXNfbG9jYWxfZGF0ZSIsIkxvY2FsRGF0ZSIsImlzX2xvY2FsX3RpbWUiLCJMb2NhbFRpbWUiLCJpc19kYXRlIiwiZGF0ZSIsIkRhdGUiLCJpc19idWZmZXIiLCJCdWZmZXIiLCJpc190aW1ldXVpZCIsIlRpbWVVdWlkIiwiaXNfdXVpZCIsIlV1aWQiLCJpc19pbmV0IiwiSW5ldEFkZHJlc3MiLCJpc19mcm96ZW4iLCJUWVBFX01BUCIsImFzY2lpIiwidmFsaWRhdG9yIiwiYmlnaW50IiwiYmxvYiIsImJvb2xlYW4iLCJjb3VudGVyIiwiZGVjaW1hbCIsImRvdWJsZSIsImZsb2F0IiwiaW5ldCIsImludCIsImxpc3QiLCJtYXAiLCJzZXQiLCJzbWFsbGludCIsInRleHQiLCJ0aW1lIiwidGltZXN0YW1wIiwidGltZXV1aWQiLCJ0aW55aW50IiwidXVpZCIsInZhcmNoYXIiLCJ2YXJpbnQiLCJmcm96ZW4iLCJnZW5lcmljX3R5cGVfdmFsaWRhdG9yIiwiZiIsImZpZWxkdHlwZSIsIm1lc3NhZ2UiLCJ2YWx1ZSIsInByb3BOYW1lIiwiZmllbGRUeXBlIiwiZm9ybWF0IiwidHlwZSIsIm1vZHVsZSIsImV4cG9ydHMiXSwibWFwcGluZ3MiOiI7O0FBQUEsSUFBTUEsVUFBVUMs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LEVBckJTO0FBc0JmMkIsV0FBUyxFQUFFcEIsV0FBV3RDLFdBQVdrQixTQUF4QixFQXRCTTtBQXVCZnlDLFVBQVEsRUFBRXJCLFdBQVd0QyxXQUFXYSxVQUF4QixFQXZCTztBQXdCZitDLFVBQVEsRUFBRXRCLFdBQVd0QyxXQUFXbUMsU0FBeEI7QUF4Qk8sQ0FBakI7O0FBNEJBQyxTQUFTeUIsc0JBQVQsR0FBa0MsU0FBU0MsQ0FBVCxDQUFXQyxTQUFYLEVBQXNCO0FBQ3RELE1BQUksQ0FBQyxLQUFLQSxTQUFMLENBQUwsRUFBc0IsT0FBTyxJQUFQOztBQUV0QixTQUFPO0FBQ0x6QixlQUFXLEtBQUt5QixTQUFMLEVBQWdCekIsU0FEdEI7QUFFTDBCLFlBQVFDLEtBQVIsRUFBZUMsUUFBZixFQUF5QkMsU0FBekIsRUFBb0M7QUFDbEMsYUFBT3pFLEtBQUswRSxNQUFMLENBQVksOENBQVosRUFBNERILEtBQTVELEVBQW1FQyxRQUFuRSxFQUE2RUMsU0FBN0UsQ0FBUDtBQUNELEtBSkk7QUFLTEUsVUFBTTtBQUxELEdBQVA7QUFPRCxDQVZEOztBQVlBQyxPQUFPQyxPQUFQLEdBQWlCbkMsUUFBakIiLCJmaWxlIjoiZGF0YXR5cGVzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgUHJvbWlzZSA9IHJlcXVpcmUoJ2JsdWViaXJkJyk7XG5jb25zdCB1dGlsID0gcmVxdWlyZSgndXRpbCcpO1xuY29uc3QgY2hlY2sgPSByZXF1aXJlKCdjaGVjay10eXBlcycpO1xuXG5sZXQgZHNlRHJpdmVyO1xudHJ5IHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby1leHRyYW5lb3VzLWRlcGVuZGVuY2llcywgaW1wb3J0L25vLXVucmVzb2x2ZWRcbiAgZHNlRHJpdmVyID0gcmVxdWlyZSgnZHNlLWRyaXZlcicpO1xufSBjYXRjaCAoZSkge1xuICBkc2VEcml2ZXIgPSBudWxsO1xufVxuXG5jb25zdCBjcWwgPSBQcm9taXNlLnByb21pc2lmeUFsbChkc2VEcml2ZXIgfHwgcmVxdWlyZSgnY2Fzc2FuZHJhLWRyaXZlcicpKTtcblxuY29uc3QgdmFsaWRhdG9ycyA9IHt9O1xudmFsaWRhdG9ycy5pc19hcnJheSA9IChvYmopID0+IChjaGVjay5hcnJheShvYmopKTtcbnZhbGlkYXRvcnMuaXNfb2JqZWN0ID0gKG9iaikgPT4gKGNoZWNrLm9iamVjdChvYmopKTtcbnZhbGlkYXRvcnMuaXNfbG9uZyA9IChvYmopID0+ICgob2JqIGluc3RhbmNlb2YgY3FsLnR5cGVzLkxvbmcpKTtcbnZhbGlkYXRvcnMuaXNfZGVjaW1hbCA9IChvYmopID0+ICgob2JqIGluc3RhbmNlb2YgY3FsLnR5cGVzLkJpZ0RlY2ltYWwpKTtcbnZhbGlkYXRvcnMuaXNfaW50ZWdlciA9IChvYmopID0+IChjaGVjay5pbnRlZ2VyKG9iaikpO1xudmFsaWRhdG9ycy5pc192YXJfaW50ID0gKG9iaikgPT4gKChvYmogaW5zdGFuY2VvZiBjcWwudHlwZXMuSW50ZWdlcikpO1xudmFsaWRhdG9ycy5pc19ib29sZWFuID0gKG9iaikgPT4gKChvYmogPT09IHRydWUgfHwgb2JqID09PSBmYWxzZSkpO1xudmFsaWRhdG9ycy5pc19udW1iZXIgPSAob2JqKSA9PiAoY2hlY2subnVtYmVyKG9iaikpO1xudmFsaWRhdG9ycy5pc19zdHJpbmcgPSAob2JqKSA9PiAoY2hlY2suc3RyaW5nKG9iaikpO1xudmFsaWRhdG9ycy5pc19sb2NhbF9kYXRlID0gKG9iaikgPT4gKChvYmogaW5zdGFuY2VvZiBjcWwudHlwZXMuTG9jYWxEYXRlKSk7XG52YWxpZGF0b3JzLmlzX2xvY2FsX3RpbWUgPSAob2JqKSA9PiAoKG9iaiBpbnN0YW5jZW9mIGNxbC50eXBlcy5Mb2NhbFRpbWUpKTtcbnZhbGlkYXRvcnMuaXNfZGF0ZSA9IChvYmopID0+IChjaGVjay5kYXRlKG5ldyBEYXRlKG9iaikpKTtcbnZhbGlkYXRvcnMuaXNfYnVmZmVyID0gKG9iaikgPT4gKChvYmogaW5zdGFuY2VvZiBCdWZmZXIpKTtcbnZhbGlkYXRvcnMuaXNfdGltZXV1aWQgPSAob2JqKSA9PiAoKG9iaiBpbnN0YW5jZW9mIGNxbC50eXBlcy5UaW1lVXVpZCkpO1xudmFsaWRhdG9ycy5pc191dWlkID0gKG9iaikgPT4gKChvYmogaW5zdGFuY2VvZiBjcWwudHlwZXMuVXVpZCkpO1xudmFsaWRhdG9ycy5pc19pbmV0ID0gKG9iaikgPT4gKChvYmogaW5zdGFuY2VvZiBjcWwudHlwZXMuSW5ldEFkZHJlc3MpKTtcbnZhbGlkYXRvcnMuaXNfZnJvemVuID0gKG9iaikgPT4gKCh2YWxpZGF0b3JzLmlzX2FycmF5KG9iaikgfHwgdmFsaWRhdG9ycy5pc19vYmplY3Qob2JqKSkpO1xuXG5jb25zdCBUWVBFX01BUCA9IHtcbiAgYXNjaWk6IHsgdmFsaWRhdG9yOiB2YWxpZGF0b3JzLmlzX3N0cmluZyB9LFxuICBiaWdpbnQ6IHsgdmFsaWRhdG9yOiB2YWxpZGF0b3JzLmlzX2xvbmcgfSxcbiAgYmxvYjogeyB2YWxpZGF0b3I6IHZhbGlkYXRvcnMuaXNfYnVmZmVyIH0sXG4gIGJvb2xlYW46IHsgdmFsaWRhdG9yOiB2YWxpZGF0b3JzLmlzX2Jvb2xlYW4gfSxcbiAgY291bnRlcjogeyB2YWxpZGF0b3I6IHZhbGlkYXRvcnMuaXNfbG9uZyB9LFxuICBkYXRlOiB7IHZhbGlkYXRvcjogdmFsaWRhdG9ycy5pc19sb2NhbF9kYXRlIH0sXG4gIGRlY2ltYWw6IHsgdmFsaWRhdG9yOiB2YWxpZGF0b3JzLmlzX2RlY2ltYWwgfSxcbiAgZG91YmxlOiB7IHZhbGlkYXRvcjogdmFsaWRhdG9ycy5pc19udW1iZXIgfSxcbiAgZmxvYXQ6IHsgdmFsaWRhdG9yOiB2YWxpZGF0b3JzLmlzX251bWJlciB9LFxuICBpbmV0OiB7IHZhbGlkYXRvcjogdmFsaWRhdG9ycy5pc19pbmV0IH0sXG4gIGludDogeyB2YWxpZGF0b3I6IHZhbGlkYXRvcnMuaXNfaW50ZWdlciB9LFxuICBsaXN0OiB7IHZhbGlkYXRvcjogdmFsaWRhdG9ycy5pc19hcnJheSB9LFxuICBtYXA6IHsgdmFsaWRhdG9yOiB2YWxpZGF0b3JzLmlzX29iamVjdCB9LFxuICBzZXQ6IHsgdmFsaWRhdG9yOiB2YWxpZGF0b3JzLmlzX2FycmF5IH0sXG4gIHNtYWxsaW50OiB7IHZhbGlkYXRvcjogdmFsaWRhdG9ycy5pc19pbnRlZ2VyIH0sXG4gIHRleHQ6IHsgdmFsaWRhdG9yOiB2YWxpZGF0b3JzLmlzX3N0cmluZyB9LFxuICB0aW1lOiB7IHZhbGlkYXRvcjogdmFsaWRhdG9ycy5pc19sb2NhbF90aW1lIH0sXG4gIHRpbWVzdGFtcDogeyB2YWxpZGF0b3I6IHZhbGlkYXRvcnMuaXNfZGF0ZSB9LFxuICB0aW1ldXVpZDogeyB2YWxpZGF0b3I6IHZhbGlkYXRvcnMuaXNfdGltZXV1aWQgfSxcbiAgdGlueWludDogeyB2YWxpZGF0b3I6IHZhbGlkYXRvcnMuaXNfaW50ZWdlciB9LFxuICB1dWlkOiB7IHZhbGlkYXRvcjogdmFsaWRhdG9ycy5pc191dWlkIH0sXG4gIHZhcmNoYXI6IHsgdmFsaWRhdG9yOiB2YWxpZGF0b3JzLmlzX3N0cmluZyB9LFxuICB2YXJpbnQ6IHsgdmFsaWRhdG9yOiB2YWxpZGF0b3JzLmlzX3Zhcl9pbnQgfSxcbiAgZnJvemVuOiB7IHZhbGlkYXRvcjogdmFsaWRhdG9ycy5pc19mcm96ZW4gfSxcbn07XG5cblxuVFlQRV9NQVAuZ2VuZXJpY190eXBlX3ZhbGlkYXRvciA9IGZ1bmN0aW9uIGYoZmllbGR0eXBlKSB7XG4gIGlmICghdGhpc1tmaWVsZHR5cGVdKSByZXR1cm4gbnVsbDtcblxuICByZXR1cm4ge1xuICAgIHZhbGlkYXRvcjogdGhpc1tmaWVsZHR5cGVdLnZhbGlkYXRvcixcbiAgICBtZXNzYWdlKHZhbHVlLCBwcm9wTmFtZSwgZmllbGRUeXBlKSB7XG4gICAgICByZXR1cm4gdXRpbC5mb3JtYXQoJ0ludmFsaWQgVmFsdWU6IFwiJXNcIiBmb3IgRmllbGQ6ICVzIChUeXBlOiAlcyknLCB2YWx1ZSwgcHJvcE5hbWUsIGZpZWxkVHlwZSk7XG4gICAgfSxcbiAgICB0eXBlOiAndHlwZV92YWxpZGF0b3InLFxuICB9O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBUWVBFX01BUDtcbiJdfQ==
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy92YWxpZGF0b3JzL2RhdGF0eXBlcy5qcyJdLCJuYW1lcyI6WyJQcm9taXNlIiwicmVxdWlyZSIsInV0aWwiLCJjaGVjayIsImRzZURyaXZlciIsImUiLCJjcWwiLCJwcm9taXNpZnlBbGwiLCJ2YWxpZGF0b3JzIiwiaXNfYXJyYXkiLCJvYmoiLCJhcnJheSIsImlzX29iamVjdCIsIm9iamVjdCIsImlzX2xvbmciLCJ0eXBlcyIsIkxvbmciLCJpc19kZWNpbWFsIiwiQmlnRGVjaW1hbCIsImlzX2ludGVnZXIiLCJpbnRlZ2VyIiwiaXNfdmFyX2ludCIsIkludGVnZXIiLCJpc19ib29sZWFuIiwiaXNfbnVtYmVyIiwibnVtYmVyIiwiaXNfc3RyaW5nIiwic3RyaW5nIiwiaXNfbG9jYWxfZGF0ZSIsIkxvY2FsRGF0ZSIsImlzX2xvY2FsX3RpbWUiLCJMb2NhbFRpbWUiLCJpc19kYXRlIiwiZGF0ZSIsIkRhdGUiLCJpc19idWZmZXIiLCJCdWZmZXIiLCJpc190aW1ldXVpZCIsIlRpbWVVdWlkIiwiaXNfdXVpZCIsIlV1aWQiLCJpc19pbmV0IiwiSW5ldEFkZHJlc3MiLCJpc19mcm96ZW4iLCJUWVBFX01BUCIsImFzY2lpIiwidmFsaWRhdG9yIiwiYmlnaW50IiwiYmxvYiIsImJvb2xlYW4iLCJjb3VudGVyIiwiZGVjaW1hbCIsImRvdWJsZSIsImZsb2F0IiwiaW5ldCIsImludCIsImxpc3QiLCJtYXAiLCJzZXQiLCJzbWFsbGludCIsInRleHQiLCJ0aW1lIiwidGltZXN0YW1wIiwidGltZXV1aWQiLCJ0aW55aW50IiwidXVpZCIsInZhcmNoYXIiLCJ2YXJpbnQiLCJmcm96ZW4iLCJnZW5lcmljX3R5cGVfdmFsaWRhdG9yIiwiZiIsImZpZWxkdHlwZSIsIm1lc3NhZ2UiLCJ2YWx1ZSIsInByb3BOYW1lIiwiZmllbGRUeXBlIiwiZm9ybWF0IiwidHlwZSIsIm1vZHVsZSIsImV4cG9ydHMiXSwibWFwcGluZ3MiOiI7O0FBQUEsSUFBTUEsVUFBVUMs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LEVBckJTO0FBc0JmMkIsV0FBUyxFQUFFcEIsV0FBV3RDLFdBQVdrQixTQUF4QixFQXRCTTtBQXVCZnlDLFVBQVEsRUFBRXJCLFdBQVd0QyxXQUFXYSxVQUF4QixFQXZCTztBQXdCZitDLFVBQVEsRUFBRXRCLFdBQVd0QyxXQUFXbUMsU0FBeEI7QUF4Qk8sQ0FBakI7O0FBMkJBQyxTQUFTeUIsc0JBQVQsR0FBa0MsU0FBU0MsQ0FBVCxDQUFXQyxTQUFYLEVBQXNCO0FBQ3RELE1BQUksQ0FBQyxLQUFLQSxTQUFMLENBQUwsRUFBc0IsT0FBTyxJQUFQOztBQUV0QixTQUFPO0FBQ0x6QixlQUFXLEtBQUt5QixTQUFMLEVBQWdCekIsU0FEdEI7QUFFTDBCLFlBQVFDLEtBQVIsRUFBZUMsUUFBZixFQUF5QkMsU0FBekIsRUFBb0M7QUFDbEMsYUFBT3pFLEtBQUswRSxNQUFMLENBQVksOENBQVosRUFBNERILEtBQTVELEVBQW1FQyxRQUFuRSxFQUE2RUMsU0FBN0UsQ0FBUDtBQUNELEtBSkk7QUFLTEUsVUFBTTtBQUxELEdBQVA7QUFPRCxDQVZEOztBQVlBQyxPQUFPQyxPQUFQLEdBQWlCbkMsUUFBakIiLCJmaWxlIjoiZGF0YXR5cGVzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgUHJvbWlzZSA9IHJlcXVpcmUoJ2JsdWViaXJkJyk7XG5jb25zdCB1dGlsID0gcmVxdWlyZSgndXRpbCcpO1xuY29uc3QgY2hlY2sgPSByZXF1aXJlKCdjaGVjay10eXBlcycpO1xuXG5sZXQgZHNlRHJpdmVyO1xudHJ5IHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby1leHRyYW5lb3VzLWRlcGVuZGVuY2llcywgaW1wb3J0L25vLXVucmVzb2x2ZWRcbiAgZHNlRHJpdmVyID0gcmVxdWlyZSgnZHNlLWRyaXZlcicpO1xufSBjYXRjaCAoZSkge1xuICBkc2VEcml2ZXIgPSBudWxsO1xufVxuXG5jb25zdCBjcWwgPSBQcm9taXNlLnByb21pc2lmeUFsbChkc2VEcml2ZXIgfHwgcmVxdWlyZSgnY2Fzc2FuZHJhLWRyaXZlcicpKTtcblxuY29uc3QgdmFsaWRhdG9ycyA9IHt9O1xudmFsaWRhdG9ycy5pc19hcnJheSA9IChvYmopID0+IChjaGVjay5hcnJheShvYmopKTtcbnZhbGlkYXRvcnMuaXNfb2JqZWN0ID0gKG9iaikgPT4gKGNoZWNrLm9iamVjdChvYmopKTtcbnZhbGlkYXRvcnMuaXNfbG9uZyA9IChvYmopID0+ICgob2JqIGluc3RhbmNlb2YgY3FsLnR5cGVzLkxvbmcpKTtcbnZhbGlkYXRvcnMuaXNfZGVjaW1hbCA9IChvYmopID0+ICgob2JqIGluc3RhbmNlb2YgY3FsLnR5cGVzLkJpZ0RlY2ltYWwpKTtcbnZhbGlkYXRvcnMuaXNfaW50ZWdlciA9IChvYmopID0+IChjaGVjay5pbnRlZ2VyKG9iaikpO1xudmFsaWRhdG9ycy5pc192YXJfaW50ID0gKG9iaikgPT4gKChvYmogaW5zdGFuY2VvZiBjcWwudHlwZXMuSW50ZWdlcikpO1xudmFsaWRhdG9ycy5pc19ib29sZWFuID0gKG9iaikgPT4gKChvYmogPT09IHRydWUgfHwgb2JqID09PSBmYWxzZSkpO1xudmFsaWRhdG9ycy5pc19udW1iZXIgPSAob2JqKSA9PiAoY2hlY2subnVtYmVyKG9iaikpO1xudmFsaWRhdG9ycy5pc19zdHJpbmcgPSAob2JqKSA9PiAoY2hlY2suc3RyaW5nKG9iaikpO1xudmFsaWRhdG9ycy5pc19sb2NhbF9kYXRlID0gKG9iaikgPT4gKChvYmogaW5zdGFuY2VvZiBjcWwudHlwZXMuTG9jYWxEYXRlKSk7XG52YWxpZGF0b3JzLmlzX2xvY2FsX3RpbWUgPSAob2JqKSA9PiAoKG9iaiBpbnN0YW5jZW9mIGNxbC50eXBlcy5Mb2NhbFRpbWUpKTtcbnZhbGlkYXRvcnMuaXNfZGF0ZSA9IChvYmopID0+IChjaGVjay5kYXRlKG5ldyBEYXRlKG9iaikpKTtcbnZhbGlkYXRvcnMuaXNfYnVmZmVyID0gKG9iaikgPT4gKChvYmogaW5zdGFuY2VvZiBCdWZmZXIpKTtcbnZhbGlkYXRvcnMuaXNfdGltZXV1aWQgPSAob2JqKSA9PiAoKG9iaiBpbnN0YW5jZW9mIGNxbC50eXBlcy5UaW1lVXVpZCkpO1xudmFsaWRhdG9ycy5pc191dWlkID0gKG9iaikgPT4gKChvYmogaW5zdGFuY2VvZiBjcWwudHlwZXMuVXVpZCkpO1xudmFsaWRhdG9ycy5pc19pbmV0ID0gKG9iaikgPT4gKChvYmogaW5zdGFuY2VvZiBjcWwudHlwZXMuSW5ldEFkZHJlc3MpKTtcbnZhbGlkYXRvcnMuaXNfZnJvemVuID0gKG9iaikgPT4gKCh2YWxpZGF0b3JzLmlzX2FycmF5KG9iaikgfHwgdmFsaWRhdG9ycy5pc19vYmplY3Qob2JqKSkpO1xuXG5jb25zdCBUWVBFX01BUCA9IHtcbiAgYXNjaWk6IHsgdmFsaWRhdG9yOiB2YWxpZGF0b3JzLmlzX3N0cmluZyB9LFxuICBiaWdpbnQ6IHsgdmFsaWRhdG9yOiB2YWxpZGF0b3JzLmlzX2xvbmcgfSxcbiAgYmxvYjogeyB2YWxpZGF0b3I6IHZhbGlkYXRvcnMuaXNfYnVmZmVyIH0sXG4gIGJvb2xlYW46IHsgdmFsaWRhdG9yOiB2YWxpZGF0b3JzLmlzX2Jvb2xlYW4gfSxcbiAgY291bnRlcjogeyB2YWxpZGF0b3I6IHZhbGlkYXRvcnMuaXNfbG9uZyB9LFxuICBkYXRlOiB7IHZhbGlkYXRvcjogdmFsaWRhdG9ycy5pc19sb2NhbF9kYXRlIH0sXG4gIGRlY2ltYWw6IHsgdmFsaWRhdG9yOiB2YWxpZGF0b3JzLmlzX2RlY2ltYWwgfSxcbiAgZG91YmxlOiB7IHZhbGlkYXRvcjogdmFsaWRhdG9ycy5pc19udW1iZXIgfSxcbiAgZmxvYXQ6IHsgdmFsaWRhdG9yOiB2YWxpZGF0b3JzLmlzX251bWJlciB9LFxuICBpbmV0OiB7IHZhbGlkYXRvcjogdmFsaWRhdG9ycy5pc19pbmV0IH0sXG4gIGludDogeyB2YWxpZGF0b3I6IHZhbGlkYXRvcnMuaXNfaW50ZWdlciB9LFxuICBsaXN0OiB7IHZhbGlkYXRvcjogdmFsaWRhdG9ycy5pc19hcnJheSB9LFxuICBtYXA6IHsgdmFsaWRhdG9yOiB2YWxpZGF0b3JzLmlzX29iamVjdCB9LFxuICBzZXQ6IHsgdmFsaWRhdG9yOiB2YWxpZGF0b3JzLmlzX2FycmF5IH0sXG4gIHNtYWxsaW50OiB7IHZhbGlkYXRvcjogdmFsaWRhdG9ycy5pc19pbnRlZ2VyIH0sXG4gIHRleHQ6IHsgdmFsaWRhdG9yOiB2YWxpZGF0b3JzLmlzX3N0cmluZyB9LFxuICB0aW1lOiB7IHZhbGlkYXRvcjogdmFsaWRhdG9ycy5pc19sb2NhbF90aW1lIH0sXG4gIHRpbWVzdGFtcDogeyB2YWxpZGF0b3I6IHZhbGlkYXRvcnMuaXNfZGF0ZSB9LFxuICB0aW1ldXVpZDogeyB2YWxpZGF0b3I6IHZhbGlkYXRvcnMuaXNfdGltZXV1aWQgfSxcbiAgdGlueWludDogeyB2YWxpZGF0b3I6IHZhbGlkYXRvcnMuaXNfaW50ZWdlciB9LFxuICB1dWlkOiB7IHZhbGlkYXRvcjogdmFsaWRhdG9ycy5pc191dWlkIH0sXG4gIHZhcmNoYXI6IHsgdmFsaWRhdG9yOiB2YWxpZGF0b3JzLmlzX3N0cmluZyB9LFxuICB2YXJpbnQ6IHsgdmFsaWRhdG9yOiB2YWxpZGF0b3JzLmlzX3Zhcl9pbnQgfSxcbiAgZnJvemVuOiB7IHZhbGlkYXRvcjogdmFsaWRhdG9ycy5pc19mcm96ZW4gfSxcbn07XG5cblRZUEVfTUFQLmdlbmVyaWNfdHlwZV92YWxpZGF0b3IgPSBmdW5jdGlvbiBmKGZpZWxkdHlwZSkge1xuICBpZiAoIXRoaXNbZmllbGR0eXBlXSkgcmV0dXJuIG51bGw7XG5cbiAgcmV0dXJuIHtcbiAgICB2YWxpZGF0b3I6IHRoaXNbZmllbGR0eXBlXS52YWxpZGF0b3IsXG4gICAgbWVzc2FnZSh2YWx1ZSwgcHJvcE5hbWUsIGZpZWxkVHlwZSkge1xuICAgICAgcmV0dXJuIHV0aWwuZm9ybWF0KCdJbnZhbGlkIFZhbHVlOiBcIiVzXCIgZm9yIEZpZWxkOiAlcyAoVHlwZTogJXMpJywgdmFsdWUsIHByb3BOYW1lLCBmaWVsZFR5cGUpO1xuICAgIH0sXG4gICAgdHlwZTogJ3R5cGVfdmFsaWRhdG9yJyxcbiAgfTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gVFlQRV9NQVA7XG4iXX0=

@@ -401,2 +401,2 @@ 'use strict';

module.exports = schemer;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy92YWxpZGF0b3JzL3NjaGVtYS5qcyJdLCJuYW1lcyI6WyJfIiwicmVxdWlyZSIsInV0aWwiLCJkYXRhdHlwZXMiLCJzY2hlbWVyIiwidmFsaWRhdGVfdGFibGVfbmFtZSIsInRhYmxlTmFtZSIsInRlc3QiLCJoYXNfZmllbGQiLCJtb2RlbFNjaGVtYSIsImZpZWxkTmFtZSIsIm9wdGlvbkZpZWxkTmFtZXMiLCJvcHRpb25zIiwidGltZXN0YW1wcyIsInRpbWVzdGFtcE9wdGlvbnMiLCJjcmVhdGVkQXQiLCJ1cGRhdGVkQXQiLCJwdXNoIiwidmVyc2lvbnMiLCJ2ZXJzaW9uT3B0aW9ucyIsImtleSIsImhhcyIsImZpZWxkcyIsImluY2x1ZGVzIiwidmFsaWRhdGVfZmllbGQiLCJmaWVsZE9iamVjdCIsIkVycm9yIiwiZm9ybWF0IiwiZmllbGR0eXBlIiwiZ2V0X2ZpZWxkX3R5cGUiLCJ0eXBlRGVmIiwiaXNfZmllbGRfZGVmYXVsdF92YWx1ZV92YWxpZCIsInZhbGlkYXRlX3ByaW1hcnlfa2V5IiwidmlydHVhbCIsImlzQXJyYXkiLCJsZW5ndGgiLCJmb3JFYWNoIiwicGFydGl0aW9uS2V5RmllbGQiLCJwcmltYXJ5S2V5RmllbGQiLCJwcmltYXJ5S2V5SW5kZXgiLCJjbHVzdGVyaW5nX29yZGVyIiwiaXNQbGFpbk9iamVjdCIsImNsdXN0ZXJpbmdPcmRlciIsImNsdXN0ZXJpbmdGaWVsZE5hbWUiLCJ0b0xvd2VyQ2FzZSIsImluZGV4T2YiLCJ2YWxpZGF0ZV9tYXRlcmlhbGl6ZWRfdmlldyIsIm1hdGVyaWFsaXplZFZpZXdPYmplY3QiLCJtYXRlcmlhbGl6ZWRWaWV3TmFtZSIsInNlbGVjdCIsIm1hdGVyaWFsaXplZFZpZXdTZWxlY3RGaWVsZCIsIm1hdGVyaWFsaXplZFZpZXdQYXJ0aXRpb25LZXlGaWVsZCIsIm1hdGVyaWFsaXplZFZpZXdQcmltYXJ5S2V5RmllbGQiLCJtYXRlcmlhbGl6ZWRWaWV3UHJpbWFyeUtleUluZGV4IiwibXZDbHVzdGVyaW5nT3JkZXIiLCJtdmx1c3RlcmluZ0ZpZWxkTmFtZSIsInZhbGlkYXRlX2luZGV4IiwiaW5kZXhEZWYiLCJpbmRleE5hbWVMaXN0IiwicmVwbGFjZSIsInNwbGl0IiwidmFsaWRhdGVfY3VzdG9tX2luZGV4IiwiY3VzdG9tSW5kZXgiLCJvbiIsInVzaW5nIiwidmFsaWRhdGVfbW9kZWxfc2NoZW1hIiwiT2JqZWN0Iiwia2V5cyIsIm1hdGVyaWFsaXplZF92aWV3cyIsImluZGV4ZXMiLCJjdXN0b21faW5kZXgiLCJjdXN0b21faW5kZXhlcyIsImZvcm1hdF92YWxpZGF0aW9uX3J1bGUiLCJydWxlIiwiZmllbGRuYW1lIiwidmFsaWRhdG9yIiwibWVzc2FnZSIsImdldF9nZW5lcmljX3ZhbGlkYXRpb25fbWVzc2FnZSIsImYxIiwiYmluZCIsInZhbHVlIiwicHJvcE5hbWUiLCJnZXRfdmFsaWRhdGlvbl9tZXNzYWdlIiwidmFsaWRhdG9ycyIsIiRkYl9mdW5jdGlvbiIsInYiLCJnZXRfdmFsaWRhdG9ycyIsInR5cGVGaWVsZFZhbGlkYXRvciIsImdlbmVyaWNfdHlwZV92YWxpZGF0b3IiLCJmaWVsZCIsInR5cGVfdmFsaWRhdGlvbiIsIkFycmF5IiwiZmllbGRydWxlIiwidHlwZSIsImlzX3JlcXVpcmVkX2ZpZWxkIiwicmVxdWlyZWQiLCJpc19wcmltYXJ5X2tleV9maWVsZCIsImRlZmF1bHQiLCJtb2R1bGUiLCJleHBvcnRzIl0sIm1hcHBpbmdzIjoiOztBQUFBLElBQU1BLElBQUlDLFFBQVEsUUFBUixDQUFWO0FBQ0EsSUFBTUMsT0FBT0QsUUFBUSxNQUFSLENBQWI7O0FBRUEsSUFBTUUsWUFBWUYsUUFBUSxhQUFSLENBQWxCOztBQUVBLElBQU1HLFVBQVU7QUFDZEMsc0JBQW9CQyxTQUFwQixFQUErQjtBQUM3QixXQUFRLE9BQU9BLFNBQVAsS0FBcUIsUUFBckIsSUFBaUMsMEJBQTBCQyxJQUExQixDQUErQkQsU0FBL0IsQ0FBekM7QUFDRCxHQUhhO0FBSWRFLFlBQVVDLFdBQVYsRUFB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QU8sQ0FBQyxLQUFELEVBQVEsTUFBUixFQUFnQixLQUFoQixFQUF1QixRQUF2QixFQUFpQzdELFFBQWpDLENBQTBDZCxZQUFZYSxNQUFaLENBQW1CWixTQUFuQixFQUE4Qm1GLElBQXhFLENBQVA7QUFDRDtBQUNELGFBQU8sSUFBUDtBQUNEO0FBQ0QsV0FBTyxJQUFQO0FBQ0Q7O0FBbmFhLENBQWhCOztBQXVhQUssT0FBT0MsT0FBUCxHQUFpQi9GLE9BQWpCIiwiZmlsZSI6InNjaGVtYS5qcyIsInNvdXJjZXNDb250ZW50IjpbImNvbnN0IF8gPSByZXF1aXJlKCdsb2Rhc2gnKTtcbmNvbnN0IHV0aWwgPSByZXF1aXJlKCd1dGlsJyk7XG5cbmNvbnN0IGRhdGF0eXBlcyA9IHJlcXVpcmUoJy4vZGF0YXR5cGVzJyk7XG5cbmNvbnN0IHNjaGVtZXIgPSB7XG4gIHZhbGlkYXRlX3RhYmxlX25hbWUodGFibGVOYW1lKSB7XG4gICAgcmV0dXJuICh0eXBlb2YgdGFibGVOYW1lID09PSAnc3RyaW5nJyAmJiAvXlthLXpBLVpdK1thLXpBLVowLTlfXSovLnRlc3QodGFibGVOYW1lKSk7XG4gIH0sXG4gIGhhc19maWVsZChtb2RlbFNjaGVtYSwgZmllbGROYW1lKSB7XG4gICAgY29uc3Qgb3B0aW9uRmllbGROYW1lcyA9IFtdO1xuICAgIGlmIChtb2RlbFNjaGVtYS5vcHRpb25zKSB7XG4gICAgICBpZiAobW9kZWxTY2hlbWEub3B0aW9ucy50aW1lc3RhbXBzKSB7XG4gICAgICAgIGNvbnN0IHRpbWVzdGFtcE9wdGlvbnMgPSB7XG4gICAgICAgICAgY3JlYXRlZEF0OiBtb2RlbFNjaGVtYS5vcHRpb25zLnRpbWVzdGFtcHMuY3JlYXRlZEF0IHx8ICdjcmVhdGVkQXQnLFxuICAgICAgICAgIHVwZGF0ZWRBdDogbW9kZWxTY2hlbWEub3B0aW9ucy50aW1lc3RhbXBzLnVwZGF0ZWRBdCB8fCAndXBkYXRlZEF0JyxcbiAgICAgICAgfTtcbiAgICAgICAgb3B0aW9uRmllbGROYW1lcy5wdXNoKHRpbWVzdGFtcE9wdGlvbnMuY3JlYXRlZEF0KTtcbiAgICAgICAgb3B0aW9uRmllbGROYW1lcy5wdXNoKHRpbWVzdGFtcE9wdGlvbnMudXBkYXRlZEF0KTtcbiAgICAgIH1cblxuICAgICAgaWYgKG1vZGVsU2NoZW1hLm9wdGlvbnMudmVyc2lvbnMpIHtcbiAgICAgICAgY29uc3QgdmVyc2lvbk9wdGlvbnMgPSB7XG4gICAgICAgICAga2V5OiBtb2RlbFNjaGVtYS5vcHRpb25zLnZlcnNpb25zLmtleSB8fCAnX192JyxcbiAgICAgICAgfTtcbiAgICAgICAgb3B0aW9uRmllbGROYW1lcy5wdXNoKHZlcnNpb25PcHRpb25zLmtleSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBfLmhhcyhtb2RlbFNjaGVtYS5maWVsZHMsIGZpZWxkTmFtZSkgfHwgb3B0aW9uRmllbGROYW1lcy5pbmNsdWRlcyhmaWVsZE5hbWUpO1xuICB9LFxuICB2YWxpZGF0ZV9maWVsZChtb2RlbFNjaGVtYSwgZmllbGRPYmplY3QsIGZpZWxkTmFtZSkge1xuICAgIGlmICghZmllbGRPYmplY3QpIHtcbiAgICAgIHRocm93IChuZXcgRXJyb3IodXRpbC5mb3JtYXQoJ1NjaGVtYSBmaWVsZCBcIiVzXCIgaXMgbm90IHByb3Blcmx5IGRlZmluZWQnLCBmaWVsZE5hbWUpKSk7XG4gICAgfVxuICAgIGNvbnN0IGZpZWxkdHlwZSA9IHRoaXMuZ2V0X2ZpZWxkX3R5cGUobW9kZWxTY2hlbWEsIGZpZWxkTmFtZSk7XG4gICAgaWYgKCFfLmhhcyhkYXRhdHlwZXMsIGZpZWxkdHlwZSkpIHtcbiAgICAgIHRocm93IChuZXcgRXJyb3IodXRpbC5mb3JtYXQoJ0ludmFsaWQgZmllbGQgdHlwZSBcIiVzXCIgZm9yIGZpZWxkOiAlcycsIGZpZWxkdHlwZSwgZmllbGROYW1lKSkpO1xuICAgIH1cbiAgICBpZiAoWydtYXAnLCAnbGlzdCcsICdzZXQnLCAnZnJvemVuJ10uaW5jbHVkZXMoZmllbGR0eXBlKSkge1xuICAgICAgaWYgKCFmaWVsZE9iamVjdC50eXBlRGVmKSB7XG4gICAgICAgIHRocm93IChuZXcgRXJyb3IodXRpbC5mb3JtYXQoJ01pc3NpbmcgdHlwZURlZiBmb3IgZmllbGQgdHlwZSBcIiVzXCIgb24gZmllbGQ6ICVzJywgZmllbGR0eXBlLCBmaWVsZE5hbWUpKSk7XG4gICAgICB9XG4gICAgICBpZiAodHlwZW9mIGZpZWxkT2JqZWN0LnR5cGVEZWYgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHRocm93IChuZXcgRXJyb3IodXRpbC5mb3JtYXQoJ0ludmFsaWQgdHlwZURlZiBmb3IgZmllbGQgdHlwZSBcIiVzXCIgb24gZmllbGQ6ICVzJywgZmllbGR0eXBlLCBmaWVsZE5hbWUpKSk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICghKHRoaXMuaXNfZmllbGRfZGVmYXVsdF92YWx1ZV92YWxpZChtb2RlbFNjaGVtYSwgZmllbGROYW1lKSkpIHtcbiAgICAgIHRocm93IChuZXcgRXJyb3IodXRpbC5mb3JtYXQoJ0ludmFsaWQgZGVmYXVsdCB2YWx1ZSBmb3IgZmllbGQ6ICVzKCVzKScsIGZpZWxkTmFtZSwgZmllbGR0eXBlKSkpO1xuICAgIH1cbiAgfSxcblxuICB2YWxpZGF0ZV9wcmltYXJ5X2tleShtb2RlbFNjaGVtYSkge1xuICAgIGlmICh0eXBlb2YgKG1vZGVsU2NoZW1hLmtleVswXSkgPT09ICdzdHJpbmcnKSB7XG4gICAgICBpZiAoIXRoaXMuaGFzX2ZpZWxkKG1vZGVsU2NoZW1hLCBtb2RlbFNjaGVtYS5rZXlbMF0pKSB7XG4gICAgICAgIHRocm93IChuZXcgRXJyb3IoJ1BhcnRpdGlvbiBLZXkgbXVzdCBhbHNvIGJlIGEgdmFsaWQgZmllbGQgbmFtZScpKTtcbiAgICAgIH1cbiAgICAgIGlmIChtb2RlbFNjaGVtYS5maWVsZHNbbW9kZWxTY2hlbWEua2V5WzBdXSAmJiBtb2RlbFNjaGVtYS5maWVsZHNbbW9kZWxTY2hlbWEua2V5WzBdXS52aXJ0dWFsKSB7XG4gICAgICAgIHRocm93IChuZXcgRXJyb3IoXCJQYXJ0aXRpb24gS2V5IG11c3QgYWxzbyBiZSBhIGRiIGZpZWxkIG5hbWUsIGNhbid0IGJlIGEgdmlydHVhbCBmaWVsZCBuYW1lXCIpKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKF8uaXNBcnJheShtb2RlbFNjaGVtYS5rZXlbMF0pKSB7XG4gICAgICBpZiAobW9kZWxTY2hlbWEua2V5WzBdLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB0aHJvdyAobmV3IEVycm9yKFwiUGFydGl0aW9uIEtleSBhcnJheSBjYW4ndCBiZSBlbXB0eVwiKSk7XG4gICAgICB9XG4gICAgICBtb2RlbFNjaGVtYS5rZXlbMF0uZm9yRWFjaCgocGFydGl0aW9uS2V5RmllbGQpID0+IHtcbiAgICAgICAgaWYgKCh0eXBlb2YgKHBhcnRpdGlvbktleUZpZWxkKSAhPT0gJ3N0cmluZycpIHx8ICF0aGlzLmhhc19maWVsZChtb2RlbFNjaGVtYSwgcGFydGl0aW9uS2V5RmllbGQpKSB7XG4gICAgICAgICAgdGhyb3cgKG5ldyBFcnJvcignUGFydGl0aW9uIEtleSBhcnJheSBtdXN0IGNvbnRhaW4gb25seSB2YWxpZCBmaWVsZCBuYW1lcycpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobW9kZWxTY2hlbWEuZmllbGRzW3BhcnRpdGlvbktleUZpZWxkXSAmJiBtb2RlbFNjaGVtYS5maWVsZHNbcGFydGl0aW9uS2V5RmllbGRdLnZpcnR1YWwpIHtcbiAgICAgICAgICB0aHJvdyAobmV3IEVycm9yKFwiUGFydGl0aW9uIEtleSBhcnJheSBtdXN0IGNvbnRhaW4gb25seSBkYiBmaWVsZCBuYW1lcywgY2FuJ3QgY29udGFpbiB2aXJ0dWFsIGZpZWxkIG5hbWVzXCIpKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IChuZXcgRXJyb3IoJ1BhcnRpdGlvbiBLZXkgbXVzdCBiZSBhIGZpZWxkIG5hbWUgc3RyaW5nLCBvciBhcnJheSBvZiBmaWVsZCBuYW1lcycpKTtcbiAgICB9XG5cbiAgICBtb2RlbFNjaGVtYS5rZXkuZm9yRWFjaCgocHJpbWFyeUtleUZpZWxkLCBwcmltYXJ5S2V5SW5kZXgpID0+IHtcbiAgICAgIGlmIChwcmltYXJ5S2V5SW5kZXggPiAwKSB7XG4gICAgICAgIGlmICgodHlwZW9mIChwcmltYXJ5S2V5RmllbGQpICE9PSAnc3RyaW5nJykgfHwgIXRoaXMuaGFzX2ZpZWxkKG1vZGVsU2NoZW1hLCBwcmltYXJ5S2V5RmllbGQpKSB7XG4gICAgICAgICAgdGhyb3cgKG5ldyBFcnJvcignQ2x1c3RlcmluZyBLZXlzIG11c3QgYmUgdmFsaWQgZmllbGQgbmFtZXMnKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1vZGVsU2NoZW1hLmZpZWxkc1twcmltYXJ5S2V5RmllbGRdICYmIG1vZGVsU2NoZW1hLmZpZWxkc1twcmltYXJ5S2V5RmllbGRdLnZpcnR1YWwpIHtcbiAgICAgICAgICB0aHJvdyAobmV3IEVycm9yKFwiQ2x1c3RlcmluZyBLZXlzIG11c3QgYmUgZGIgZmllbGQgbmFtZXMsIGNhbid0IGJlIHZpcnR1YWwgZmllbGQgbmFtZXNcIikpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAobW9kZWxTY2hlbWEuY2x1c3RlcmluZ19vcmRlcikge1xuICAgICAgaWYgKCFfLmlzUGxhaW5PYmplY3QobW9kZWxTY2hlbWEuY2x1c3RlcmluZ19vcmRlcikpIHtcbiAgICAgICAgdGhyb3cgKG5ldyBFcnJvcignY2x1c3RlcmluZ19vcmRlciBtdXN0IGJlIGFuIG9iamVjdCBvZiBjbHVzdGVyaW5nX2tleSBhdHRyaWJ1dGVzJykpO1xuICAgICAgfVxuXG4gICAgICBfLmZvckVhY2gobW9kZWxTY2hlbWEuY2x1c3RlcmluZ19vcmRlciwgKGNsdXN0ZXJpbmdPcmRlciwgY2x1c3RlcmluZ0ZpZWxkTmFtZSkgPT4ge1xuICAgICAgICBpZiAoIVsnYXNjJywgJ2Rlc2MnXS5pbmNsdWRlcyhjbHVzdGVyaW5nT3JkZXIudG9Mb3dlckNhc2UoKSkpIHtcbiAgICAgICAgICB0aHJvdyAobmV3IEVycm9yKCdjbHVzdGVyaW5nX29yZGVyIGF0dHJpYnV0ZSB2YWx1ZXMgY2FuIG9ubHkgYmUgQVNDIG9yIERFU0MnKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1vZGVsU2NoZW1hLmtleS5pbmRleE9mKGNsdXN0ZXJpbmdGaWVsZE5hbWUpIDwgMSkge1xuICAgICAgICAgIHRocm93IChuZXcgRXJyb3IoJ2NsdXN0ZXJpbmdfb3JkZXIgZmllbGQgYXR0cmlidXRlcyBtdXN0IGJlIGNsdXN0ZXJpbmcga2V5cyBvbmx5JykpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH0sXG5cbiAgdmFsaWRhdGVfbWF0ZXJpYWxpemVkX3ZpZXcobW9kZWxTY2hlbWEsIG1hdGVyaWFsaXplZFZpZXdPYmplY3QsIG1hdGVyaWFsaXplZFZpZXdOYW1lKSB7XG4gICAgaWYgKCFfLmlzUGxhaW5PYmplY3QobWF0ZXJpYWxpemVkVmlld09iamVjdCkpIHtcbiAgICAgIHRocm93IChuZXcgRXJyb3IodXRpbC5mb3JtYXQoJ2F0dHJpYnV0ZSBcIiVzXCIgdW5kZXIgbWF0ZXJpYWxpemVkX3ZpZXdzIG11c3QgYmUgYW4gb2JqZWN0JywgbWF0ZXJpYWxpemVkVmlld05hbWUpKSk7XG4gICAgfVxuXG4gICAgaWYgKCFtYXRlcmlhbGl6ZWRWaWV3T2JqZWN0LnNlbGVjdCB8fCAhbWF0ZXJpYWxpemVkVmlld09iamVjdC5rZXkpIHtcbiAgICAgIHRocm93IChuZXcgRXJyb3IodXRpbC5mb3JtYXQoJ21hdGVyaWFsaXplZF92aWV3IFwiJXNcIiBtdXN0IGhhdmUgXCJzZWxlY3RcIiBhbmQgXCJrZXlcIiBhdHRyaWJ1dGVzJywgbWF0ZXJpYWxpemVkVmlld05hbWUpKSk7XG4gICAgfVxuXG4gICAgaWYgKCFfLmlzQXJyYXkobWF0ZXJpYWxpemVkVmlld09iamVjdC5zZWxlY3QpIHx8ICFfLmlzQXJyYXkobWF0ZXJpYWxpemVkVmlld09iamVjdC5rZXkpKSB7XG4gICAgICB0aHJvdyAobmV3IEVycm9yKHV0aWwuZm9ybWF0KCdcInNlbGVjdFwiIGFuZCBcImtleVwiIGF0dHJpYnV0ZXMgbXVzdCBiZSBhbiBhcnJheSB1bmRlciBhdHRyaWJ1dGUgJXMgb2YgbWF0ZXJpYWxpemVkX3ZpZXdzJywgbWF0ZXJpYWxpemVkVmlld05hbWUpKSk7XG4gICAgfVxuXG4gICAgbWF0ZXJpYWxpemVkVmlld09iamVjdC5zZWxlY3QuZm9yRWFjaCgobWF0ZXJpYWxpemVkVmlld1NlbGVjdEZpZWxkKSA9PiB7XG4gICAgICBpZiAoKHR5cGVvZiAobWF0ZXJpYWxpemVkVmlld1NlbGVjdEZpZWxkKSAhPT0gJ3N0cmluZycpXG4gICAgICAgICAgICB8fCAhKHRoaXMuaGFzX2ZpZWxkKG1vZGVsU2NoZW1hLCBtYXRlcmlhbGl6ZWRWaWV3U2VsZWN0RmllbGQpXG4gICAgICAgICAgICB8fCBtYXRlcmlhbGl6ZWRWaWV3U2VsZWN0RmllbGQgPT09ICcqJykpIHtcbiAgICAgICAgdGhyb3cgKG5ldyBFcnJvcih1dGlsLmZvcm1hdChcbiAgICAgICAgICAndGhlIHNlbGVjdCBhdHRyaWJ1dGUgdW5kZXIgbWF0ZXJpYWxpemVkX3ZpZXcgJXMgbXVzdCBiZSBhbiBhcnJheSBvZiBmaWVsZCBuYW1lIHN0cmluZ3Mgb3IgW1wiKlwiXScsXG4gICAgICAgICAgbWF0ZXJpYWxpemVkVmlld05hbWUsXG4gICAgICAgICkpKTtcbiAgICAgIH1cblxuICAgICAgaWYgKG1vZGVsU2NoZW1hLmZpZWxkc1ttYXRlcmlhbGl6ZWRWaWV3U2VsZWN0RmllbGRdXG4gICAgICAgICAgJiYgbW9kZWxTY2hlbWEuZmllbGRzW21hdGVyaWFsaXplZFZpZXdTZWxlY3RGaWVsZF0udmlydHVhbCkge1xuICAgICAgICB0aHJvdyAobmV3IEVycm9yKHV0aWwuZm9ybWF0KFxuICAgICAgICAgICd0aGUgc2VsZWN0IGF0dHJpYnV0ZSB1bmRlciAlcyBvZiBtYXRlcmlhbGl6ZWRfdmlld3MgbXVzdCBiZSBhbiBhcnJheSBvZiBkYiBmaWVsZCBuYW1lcywgJyArXG4gICAgICAgICAgJ2Nhbm5vdCBjb250YWluIGFueSB2aXJ0dWFsIGZpZWxkIG5hbWUnLFxuICAgICAgICAgIG1hdGVyaWFsaXplZFZpZXdOYW1lLFxuICAgICAgICApKSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyB2YWxpZGF0ZSBtYXRlcmlhbGl6ZWRfdmlldyBwcmltYXJ5IGtleVxuICAgIGlmICh0eXBlb2YgKG1hdGVyaWFsaXplZFZpZXdPYmplY3Qua2V5WzBdKSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGlmICghdGhpcy5oYXNfZmllbGQobW9kZWxTY2hlbWEsIG1hdGVyaWFsaXplZFZpZXdPYmplY3Qua2V5WzBdKSkge1xuICAgICAgICB0aHJvdyAobmV3IEVycm9yKHV0aWwuZm9ybWF0KCdtYXRlcmlhbGl6ZWRfdmlldyAlczogcGFydGl0aW9uIGtleSBzdHJpbmcgbXVzdCBtYXRjaCBhIHZhbGlkIGZpZWxkIG5hbWUnLCBtYXRlcmlhbGl6ZWRWaWV3TmFtZSkpKTtcbiAgICAgIH1cbiAgICAgIGlmIChtb2RlbFNjaGVtYS5maWVsZHNbbWF0ZXJpYWxpemVkVmlld09iamVjdC5rZXlbMF1dXG4gICAgICAgICYmIG1vZGVsU2NoZW1hLmZpZWxkc1ttYXRlcmlhbGl6ZWRWaWV3T2JqZWN0LmtleVswXV0udmlydHVhbCkge1xuICAgICAgICB0aHJvdyAobmV3IEVycm9yKHV0aWwuZm9ybWF0KFxuICAgICAgICAgICdtYXRlcmlhbGl6ZWRfdmlldyAlczogcGFydGl0aW9uIGtleSBtdXN0IG1hdGNoIGEgZGIgZmllbGQgbmFtZSwgY2Fubm90IGJlIGEgdmlydHVhbCBmaWVsZCBuYW1lJyxcbiAgICAgICAgICBtYXRlcmlhbGl6ZWRWaWV3TmFtZSxcbiAgICAgICAgKSkpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoXy5pc0FycmF5KG1hdGVyaWFsaXplZFZpZXdPYmplY3Qua2V5WzBdKSkge1xuICAgICAgaWYgKG1hdGVyaWFsaXplZFZpZXdPYmplY3Qua2V5WzBdLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB0aHJvdyAobmV3IEVycm9yKHV0aWwuZm9ybWF0KCdtYXRlcmlhbGl6ZWRfdmlldyAlczogcGFydGl0aW9uIGtleSBhcnJheSBjYW5ub3QgYmUgZW1wdHknLCBtYXRlcmlhbGl6ZWRWaWV3TmFtZSkpKTtcbiAgICAgIH1cbiAgICAgIG1hdGVyaWFsaXplZFZpZXdPYmplY3Qua2V5WzBdLmZvckVhY2goKG1hdGVyaWFsaXplZFZpZXdQYXJ0aXRpb25LZXlGaWVsZCkgPT4ge1xuICAgICAgICBpZiAoKHR5cGVvZiAobWF0ZXJpYWxpemVkVmlld1BhcnRpdGlvbktleUZpZWxkKSAhPT0gJ3N0cmluZycpXG4gICAgICAgICAgICB8fCAhdGhpcy5oYXNfZmllbGQobW9kZWxTY2hlbWEsIG1hdGVyaWFsaXplZFZpZXdQYXJ0aXRpb25LZXlGaWVsZCkpIHtcbiAgICAgICAgICB0aHJvdyAobmV3IEVycm9yKHV0aWwuZm9ybWF0KFxuICAgICAgICAgICAgJ21hdGVyaWFsaXplZF92aWV3ICVzOiBwYXJ0aXRpb24ga2V5IGFycmF5IG11c3QgY29udGFpbiBvbmx5IHZhbGlkIGZpZWxkIG5hbWVzJyxcbiAgICAgICAgICAgIG1hdGVyaWFsaXplZFZpZXdOYW1lLFxuICAgICAgICAgICkpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobW9kZWxTY2hlbWEuZmllbGRzW21hdGVyaWFsaXplZFZpZXdQYXJ0aXRpb25LZXlGaWVsZF1cbiAgICAgICAgICAmJiBtb2RlbFNjaGVtYS5maWVsZHNbbWF0ZXJpYWxpemVkVmlld1BhcnRpdGlvbktleUZpZWxkXS52aXJ0dWFsKSB7XG4gICAgICAgICAgdGhyb3cgKG5ldyBFcnJvcih1dGlsLmZvcm1hdChcbiAgICAgICAgICAgICdtYXRlcmlhbGl6ZWRfdmlldyAlczogcGFydGl0aW9uIGtleSBhcnJheSBtdXN0IGNvbnRhaW4gb25seSBkYiBmaWVsZCBuYW1lcywgJyArXG4gICAgICAgICAgICAnY2Fubm90IGNvbnRhaW4gdmlydHVhbCBmaWVsZCBuYW1lcycsXG4gICAgICAgICAgICBtYXRlcmlhbGl6ZWRWaWV3TmFtZSxcbiAgICAgICAgICApKSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyAobmV3IEVycm9yKHV0aWwuZm9ybWF0KFxuICAgICAgICAnbWF0ZXJpYWxpemVkX3ZpZXcgJXM6IHBhcnRpdGlvbiBrZXkgbXVzdCBiZSBhIGZpZWxkIG5hbWUgc3RyaW5nLCBvciBhcnJheSBvZiBmaWVsZCBuYW1lcycsXG4gICAgICAgIG1hdGVyaWFsaXplZFZpZXdOYW1lLFxuICAgICAgKSkpO1xuICAgIH1cblxuICAgIG1hdGVyaWFsaXplZFZpZXdPYmplY3Qua2V5LmZvckVhY2goKG1hdGVyaWFsaXplZFZpZXdQcmltYXJ5S2V5RmllbGQsIG1hdGVyaWFsaXplZFZpZXdQcmltYXJ5S2V5SW5kZXgpID0+IHtcbiAgICAgIGlmIChtYXRlcmlhbGl6ZWRWaWV3UHJpbWFyeUtleUluZGV4ID4gMCkge1xuICAgICAgICBpZiAoKHR5cGVvZiAobWF0ZXJpYWxpemVkVmlld1ByaW1hcnlLZXlGaWVsZCkgIT09ICdzdHJpbmcnKVxuICAgICAgICAgICAgfHwgIXRoaXMuaGFzX2ZpZWxkKG1vZGVsU2NoZW1hLCBtYXRlcmlhbGl6ZWRWaWV3UHJpbWFyeUtleUZpZWxkKSkge1xuICAgICAgICAgIHRocm93IChuZXcgRXJyb3IodXRpbC5mb3JtYXQoJ21hdGVyaWFsaXplZF92aWV3ICVzOiBjbHVzdGVyaW5nIGtleXMgbXVzdCBiZSB2YWxpZCBmaWVsZCBuYW1lcycsIG1hdGVyaWFsaXplZFZpZXdOYW1lKSkpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtb2RlbFNjaGVtYS5maWVsZHNbbWF0ZXJpYWxpemVkVmlld1ByaW1hcnlLZXlGaWVsZF1cbiAgICAgICAgICAmJiBtb2RlbFNjaGVtYS5maWVsZHNbbWF0ZXJpYWxpemVkVmlld1ByaW1hcnlLZXlGaWVsZF0udmlydHVhbCkge1xuICAgICAgICAgIHRocm93IChuZXcgRXJyb3IodXRpbC5mb3JtYXQoXG4gICAgICAgICAgICAnbWF0ZXJpYWxpemVkX3ZpZXcgJXM6IGNsdXN0ZXJpbmcga2V5cyBtdXN0IGJlIGRiIGZpZWxkIG5hbWVzLCBjYW5ub3QgY29udGFpbiB2aXJ0dWFsIGZpZWxkcycsXG4gICAgICAgICAgICBtYXRlcmlhbGl6ZWRWaWV3TmFtZSxcbiAgICAgICAgICApKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmIChtYXRlcmlhbGl6ZWRWaWV3T2JqZWN0LmNsdXN0ZXJpbmdfb3JkZXIpIHtcbiAgICAgIGlmICghXy5pc1BsYWluT2JqZWN0KG1hdGVyaWFsaXplZFZpZXdPYmplY3QuY2x1c3RlcmluZ19vcmRlcikpIHtcbiAgICAgICAgdGhyb3cgKG5ldyBFcnJvcih1dGlsLmZvcm1hdChcbiAgICAgICAgICAnbWF0ZXJpYWxpemVkX3ZpZXcgJXM6IGNsdXN0ZXJpbmdfb3JkZXIgbXVzdCBiZSBhbiBvYmplY3Qgb2YgY2x1c3RlcmluZ19rZXkgYXR0cmlidXRlcycsXG4gICAgICAgICAgbWF0ZXJpYWxpemVkVmlld05hbWUsXG4gICAgICAgICkpKTtcbiAgICAgIH1cblxuICAgICAgXy5mb3JFYWNoKG1hdGVyaWFsaXplZFZpZXdPYmplY3QuY2x1c3RlcmluZ19vcmRlciwgKG12Q2x1c3RlcmluZ09yZGVyLCBtdmx1c3RlcmluZ0ZpZWxkTmFtZSkgPT4ge1xuICAgICAgICBpZiAoIVsnYXNjJywgJ2Rlc2MnXS5pbmNsdWRlcyhtdkNsdXN0ZXJpbmdPcmRlci50b0xvd2VyQ2FzZSgpKSkge1xuICAgICAgICAgIHRocm93IChuZXcgRXJyb3IodXRpbC5mb3JtYXQoJ21hdGVyaWFsaXplZF92aWV3ICVzOiBjbHVzdGVyaW5nX29yZGVyIGF0dHJpYnV0ZSB2YWx1ZXMgY2FuIG9ubHkgYmUgQVNDIG9yIERFU0MnLCBtYXRlcmlhbGl6ZWRWaWV3TmFtZSkpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWF0ZXJpYWxpemVkVmlld09iamVjdC5rZXkuaW5kZXhPZihtdmx1c3RlcmluZ0ZpZWxkTmFtZSkgPCAxKSB7XG4gICAgICAgICAgdGhyb3cgKG5ldyBFcnJvcih1dGlsLmZvcm1hdChcbiAgICAgICAgICAgICdtYXRlcmlhbGl6ZWRfdmlldyAlczogY2x1c3RlcmluZ19vcmRlciBmaWVsZCBhdHRyaWJ1dGVzIG11c3QgYmUgY2x1c3RlcmluZyBrZXlzIG9ubHknLFxuICAgICAgICAgICAgbWF0ZXJpYWxpemVkVmlld05hbWUsXG4gICAgICAgICAgKSkpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH0sXG5cbiAgdmFsaWRhdGVfaW5kZXgobW9kZWxTY2hlbWEsIGluZGV4RGVmKSB7XG4gICAgaWYgKHR5cGVvZiBpbmRleERlZiAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IChuZXcgRXJyb3IoJ2luZGV4ZXMgbXVzdCBiZSBhbiBhcnJheSBvZiBzdHJpbmdzJykpO1xuICAgIH1cblxuICAgIGNvbnN0IGluZGV4TmFtZUxpc3QgPSBpbmRleERlZi5yZXBsYWNlKC9bXCJcXHNdL2csICcnKS5zcGxpdCgvWygpXS9nKTtcbiAgICBpZiAoaW5kZXhOYW1lTGlzdC5sZW5ndGggPiAxKSB7XG4gICAgICBpbmRleE5hbWVMaXN0WzBdID0gaW5kZXhOYW1lTGlzdFswXS50b0xvd2VyQ2FzZSgpO1xuICAgICAgaWYgKCFbJ2VudHJpZXMnLCAna2V5cycsICd2YWx1ZXMnLCAnZnVsbCddLmluY2x1ZGVzKGluZGV4TmFtZUxpc3RbMF0pKSB7XG4gICAgICAgIHRocm93IChuZXcgRXJyb3IodXRpbC5mb3JtYXQoJ2luZGV4IFwiJXNcIiBpcyBub3QgZGVmaW5lZCBwcm9wZXJseScsIGluZGV4RGVmKSkpO1xuICAgICAgfVxuICAgICAgaWYgKCF0aGlzLmhhc19maWVsZChtb2RlbFNjaGVtYSwgaW5kZXhOYW1lTGlzdFsxXSkpIHtcbiAgICAgICAgdGhyb3cgKG5ldyBFcnJvcih1dGlsLmZvcm1hdCgnXCIlc1wiIGlzIG5vdCBhIHZhbGlkIGZpZWxkIG5hbWUsIGluZGV4ZXMgbXVzdCBiZSBkZWZpbmVkIG9uIGZpZWxkIG5hbWVzJywgaW5kZXhOYW1lTGlzdFsxXSkpKTtcbiAgICAgIH1cbiAgICAgIGlmIChtb2RlbFNjaGVtYS5maWVsZHNbaW5kZXhOYW1lTGlzdFsxXV0gJiYgbW9kZWxTY2hlbWEuZmllbGRzW2luZGV4TmFtZUxpc3RbMV1dLnZpcnR1YWwpIHtcbiAgICAgICAgdGhyb3cgKG5ldyBFcnJvcihcImluZGV4ZXMgbXVzdCBiZSBhbiBhcnJheSBvZiBkYiBmaWVsZCBuYW1lcywgY2FuJ3QgY29udGFpbiB2aXJ0dWFsIGZpZWxkc1wiKSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICghdGhpcy5oYXNfZmllbGQobW9kZWxTY2hlbWEsIGluZGV4TmFtZUxpc3RbMF0pKSB7XG4gICAgICAgIHRocm93IChuZXcgRXJyb3IodXRpbC5mb3JtYXQoJ1wiJXNcIiBpcyBub3QgYSB2YWxpZCBmaWVsZCwgaW5kZXhlcyBtdXN0IGJlIGRlZmluZWQgb24gZmllbGQgbmFtZXMnLCBpbmRleE5hbWVMaXN0WzBdKSkpO1xuICAgICAgfVxuICAgICAgaWYgKG1vZGVsU2NoZW1hLmZpZWxkc1tpbmRleE5hbWVMaXN0WzBdXSAmJiBtb2RlbFNjaGVtYS5maWVsZHNbaW5kZXhOYW1lTGlzdFswXV0udmlydHVhbCkge1xuICAgICAgICB0aHJvdyAobmV3IEVycm9yKFwiaW5kZXhlcyBtdXN0IGJlIGFuIGFycmF5IG9mIGRiIGZpZWxkIG5hbWVzLCBjYW4ndCBjb250YWluIHZpcnR1YWwgZmllbGRzXCIpKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgdmFsaWRhdGVfY3VzdG9tX2luZGV4KG1vZGVsU2NoZW1hLCBjdXN0b21JbmRleCkge1xuICAgIGlmICghXy5pc1BsYWluT2JqZWN0KGN1c3RvbUluZGV4KSkge1xuICAgICAgdGhyb3cgKG5ldyBFcnJvcignY3VzdG9tX2luZGV4IG11c3QgYmUgYW4gb2JqZWN0IHdpdGggcHJvcGVyIGluZGV4aW5nIGF0dHJpYnV0ZXMnKSk7XG4gICAgfVxuICAgIGlmICgodHlwZW9mIChjdXN0b21JbmRleC5vbikgIT09ICdzdHJpbmcnKSB8fCAhdGhpcy5oYXNfZmllbGQobW9kZWxTY2hlbWEsIGN1c3RvbUluZGV4Lm9uKSkge1xuICAgICAgdGhyb3cgKG5ldyBFcnJvcihcImN1c3RvbV9pbmRleCBtdXN0IGhhdmUgYW4gJ29uJyBhdHRyaWJ1dGUgd2l0aCBzdHJpbmcgdmFsdWUgYW5kIHZhbHVlIG11c3QgYmUgYSB2YWxpZCBmaWVsZCBuYW1lXCIpKTtcbiAgICB9XG4gICAgaWYgKG1vZGVsU2NoZW1hLmZpZWxkc1tjdXN0b21JbmRleC5vbl0gJiYgbW9kZWxTY2hlbWEuZmllbGRzW2N1c3RvbUluZGV4Lm9uXS52aXJ0dWFsKSB7XG4gICAgICB0aHJvdyAobmV3IEVycm9yKFwiY3VzdG9tX2luZGV4ICdvbicgYXR0cmlidXRlIG11c3QgYmUgYSBkYiBmaWVsZCBuYW1lLCBjYW4ndCBjb250YWluIHZpcnR1YWwgZmllbGRzXCIpKTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiAoY3VzdG9tSW5kZXgudXNpbmcpICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgKG5ldyBFcnJvcihcImN1c3RvbV9pbmRleCBtdXN0IGhhdmUgYSAndXNpbmcnIGF0dHJpYnV0ZSB3aXRoIHN0cmluZyB2YWx1ZVwiKSk7XG4gICAgfVxuICAgIGlmICghXy5pc1BsYWluT2JqZWN0KGN1c3RvbUluZGV4Lm9wdGlvbnMpKSB7XG4gICAgICB0aHJvdyAobmV3IEVycm9yKCdjdXN0b21faW5kZXggbXVzdCBoYXZlIGFuIFwib3B0aW9uc1wiIGF0dHJpYnV0ZSBhbmQgaXQgbXVzdCBiZSBhbiBvYmplY3QsICcgK1xuICAgICAgICAncGFzcyBibGFuayB7fSBvYmplY3QgaWYgbm8gb3B0aW9ucyBhcmUgcmVxdWlyZWQnKSk7XG4gICAgfVxuICB9LFxuXG4gIHZhbGlkYXRlX21vZGVsX3NjaGVtYShtb2RlbFNjaGVtYSkge1xuICAgIGlmICghbW9kZWxTY2hlbWEpIHtcbiAgICAgIHRocm93IChuZXcgRXJyb3IoJ0Egc2NoZW1hIG11c3QgYmUgc3BlY2lmaWVkJykpO1xuICAgIH1cblxuICAgIGlmICghXy5pc1BsYWluT2JqZWN0KG1vZGVsU2NoZW1hLmZpZWxkcykgfHwgT2JqZWN0LmtleXMobW9kZWxTY2hlbWEuZmllbGRzKS5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IChuZXcgRXJyb3IoJ1NjaGVtYSBtdXN0IGNvbnRhaW4gYSBub24tZW1wdHkgXCJmaWVsZHNcIiBtYXAgb2JqZWN0JykpO1xuICAgIH1cblxuICAgIGlmICghbW9kZWxTY2hlbWEua2V5IHx8ICFfLmlzQXJyYXkobW9kZWxTY2hlbWEua2V5KSkge1xuICAgICAgdGhyb3cgKG5ldyBFcnJvcignU2NoZW1hIG11c3QgY29udGFpbiBcImtleVwiIGluIHRoZSBmb3JtOiBbIFtwYXJ0aXRpb25rZXkxLCAuLi5dLCBjbHVzdGVyaW5na2V5MSwgLi4uXScpKTtcbiAgICB9XG5cbiAgICBfLmZvckVhY2gobW9kZWxTY2hlbWEuZmllbGRzLCAoZmllbGRPYmplY3QsIGZpZWxkTmFtZSkgPT4ge1xuICAgICAgdGhpcy52YWxpZGF0ZV9maWVsZChtb2RlbFNjaGVtYSwgZmllbGRPYmplY3QsIGZpZWxkTmFtZSk7XG4gICAgfSk7XG5cbiAgICB0aGlzLnZhbGlkYXRlX3ByaW1hcnlfa2V5KG1vZGVsU2NoZW1hKTtcblxuICAgIGlmIChtb2RlbFNjaGVtYS5tYXRlcmlhbGl6ZWRfdmlld3MpIHtcbiAgICAgIGlmICghXy5pc1BsYWluT2JqZWN0KG1vZGVsU2NoZW1hLm1hdGVyaWFsaXplZF92aWV3cykpIHtcbiAgICAgICAgdGhyb3cgKG5ldyBFcnJvcignbWF0ZXJpYWxpemVkX3ZpZXdzIG11c3QgYmUgYW4gb2JqZWN0IHdpdGggdmlldyBuYW1lcyBhcyBhdHRyaWJ1dGVzJykpO1xuICAgICAgfVxuICAgICAgXy5mb3JFYWNoKG1vZGVsU2NoZW1hLm1hdGVyaWFsaXplZF92aWV3cywgKG1hdGVyaWFsaXplZFZpZXdPYmplY3QsIG1hdGVyaWFsaXplZFZpZXdOYW1lKSA9PiB7XG4gICAgICAgIHRoaXMudmFsaWRhdGVfbWF0ZXJpYWxpemVkX3ZpZXcobW9kZWxTY2hlbWEsIG1hdGVyaWFsaXplZFZpZXdPYmplY3QsIG1hdGVyaWFsaXplZFZpZXdOYW1lKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChtb2RlbFNjaGVtYS5pbmRleGVzKSB7XG4gICAgICBpZiAoIV8uaXNBcnJheShtb2RlbFNjaGVtYS5pbmRleGVzKSkge1xuICAgICAgICB0aHJvdyAobmV3IEVycm9yKCdpbmRleGVzIG11c3QgYmUgYW4gYXJyYXkgb2YgZmllbGQgbmFtZSBzdHJpbmdzJykpO1xuICAgICAgfVxuXG4gICAgICBtb2RlbFNjaGVtYS5pbmRleGVzLmZvckVhY2goKGluZGV4RGVmKSA9PiB7XG4gICAgICAgIHRoaXMudmFsaWRhdGVfaW5kZXgobW9kZWxTY2hlbWEsIGluZGV4RGVmKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChtb2RlbFNjaGVtYS5jdXN0b21faW5kZXggJiYgbW9kZWxTY2hlbWEuY3VzdG9tX2luZGV4ZXMpIHtcbiAgICAgIHRocm93IChuZXcgRXJyb3IoJ2JvdGggY3VzdG9tX2luZGV4IGFuZCBjdXN0b21faW5kZXhlcyBhcmUgZGVmaW5lZCBpbiBzY2hlbWEsIG9ubHkgb25lIG9mIHRoZW0gc2hvdWxkIGJlIGRlZmluZWQnKSk7XG4gICAgfVxuXG4gICAgaWYgKG1vZGVsU2NoZW1hLmN1c3RvbV9pbmRleCkge1xuICAgICAgdGhpcy52YWxpZGF0ZV9jdXN0b21faW5kZXgobW9kZWxTY2hlbWEsIG1vZGVsU2NoZW1hLmN1c3RvbV9pbmRleCk7XG4gICAgfVxuXG4gICAgaWYgKG1vZGVsU2NoZW1hLmN1c3RvbV9pbmRleGVzKSB7XG4gICAgICBpZiAoIV8uaXNBcnJheShtb2RlbFNjaGVtYS5jdXN0b21faW5kZXhlcykpIHtcbiAgICAgICAgdGhyb3cgKG5ldyBFcnJvcignY3VzdG9tX2luZGV4ZXMgbXVzdCBiZSBhbiBhcnJheSB3aXRoIG9iamVjdHMgd2l0aCBwcm9wZXIgaW5kZXhpbmcgYXR0cmlidXRlcycpKTtcbiAgICAgIH1cbiAgICAgIG1vZGVsU2NoZW1hLmN1c3RvbV9pbmRleGVzLmZvckVhY2goKGN1c3RvbUluZGV4KSA9PiB7XG4gICAgICAgIHRoaXMudmFsaWRhdGVfY3VzdG9tX2luZGV4KG1vZGVsU2NoZW1hLCBjdXN0b21JbmRleCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH0sXG5cbiAgZm9ybWF0X3ZhbGlkYXRpb25fcnVsZShydWxlLCBmaWVsZG5hbWUpIHtcbiAgICBpZiAoIV8uaXNQbGFpbk9iamVjdChydWxlKSkge1xuICAgICAgdGhyb3cgKG5ldyBFcnJvcih1dGlsLmZvcm1hdCgnVmFsaWRhdGlvbiBydWxlIGZvciBcIiVzXCIgbXVzdCBiZSBhIGZ1bmN0aW9uIG9yIGFuIG9iamVjdCcsIGZpZWxkbmFtZSkpKTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBydWxlLnZhbGlkYXRvciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgKG5ldyBFcnJvcih1dGlsLmZvcm1hdCgnUnVsZSB2YWxpZGF0b3IgZm9yIFwiJXNcIiBtdXN0IGJlIGEgdmFsaWQgZnVuY3Rpb24nLCBmaWVsZG5hbWUpKSk7XG4gICAgfVxuICAgIGlmICghcnVsZS5tZXNzYWdlKSB7XG4gICAgICBydWxlLm1lc3NhZ2UgPSB0aGlzLmdldF9nZW5lcmljX3ZhbGlkYXRpb25fbWVzc2FnZTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBydWxlLm1lc3NhZ2UgPT09ICdzdHJpbmcnKSB7XG4gICAgICBydWxlLm1lc3NhZ2UgPSBmdW5jdGlvbiBmMShtZXNzYWdlKSB7XG4gICAgICAgIHJldHVybiB1dGlsLmZvcm1hdChtZXNzYWdlKTtcbiAgICAgIH0uYmluZChudWxsLCBydWxlLm1lc3NhZ2UpO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHJ1bGUubWVzc2FnZSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgKG5ldyBFcnJvcih1dGlsLmZvcm1hdCgnSW52YWxpZCB2YWxpZGF0b3IgbWVzc2FnZSBmb3IgXCIlc1wiLCBtdXN0IGJlIHN0cmluZyBvciBhIGZ1bmN0aW9uJywgZmllbGRuYW1lKSkpO1xuICAgIH1cbiAgICByZXR1cm4gcnVsZTtcbiAgfSxcblxuICBnZXRfZ2VuZXJpY192YWxpZGF0aW9uX21lc3NhZ2UodmFsdWUsIHByb3BOYW1lLCBmaWVsZHR5cGUpIHtcbiAgICByZXR1cm4gdXRpbC5mb3JtYXQoJ0ludmFsaWQgVmFsdWU6IFwiJXNcIiBmb3IgRmllbGQ6ICVzIChUeXBlOiAlcyknLCB2YWx1ZSwgcHJvcE5hbWUsIGZpZWxkdHlwZSk7XG4gIH0sXG5cbiAgZ2V0X3ZhbGlkYXRpb25fbWVzc2FnZSh2YWxpZGF0b3JzLCB2YWx1ZSkge1xuICAgIGlmICh2YWx1ZSA9PSBudWxsIHx8IChfLmlzUGxhaW5PYmplY3QodmFsdWUpICYmIHZhbHVlLiRkYl9mdW5jdGlvbikpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGZvciAobGV0IHYgPSAwOyB2IDwgdmFsaWRhdG9ycy5sZW5ndGg7IHYrKykge1xuICAgICAgaWYgKHR5cGVvZiB2YWxpZGF0b3JzW3ZdLnZhbGlkYXRvciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBpZiAoIXZhbGlkYXRvcnNbdl0udmFsaWRhdG9yKHZhbHVlKSkge1xuICAgICAgICAgIHJldHVybiB2YWxpZGF0b3JzW3ZdLm1lc3NhZ2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH0sXG5cbiAgZ2V0X3ZhbGlkYXRvcnMobW9kZWxTY2hlbWEsIGZpZWxkbmFtZSkge1xuICAgIGNvbnN0IHZhbGlkYXRvcnMgPSBbXTtcbiAgICBjb25zdCBmaWVsZHR5cGUgPSB0aGlzLmdldF9maWVsZF90eXBlKG1vZGVsU2NoZW1hLCBmaWVsZG5hbWUpO1xuICAgIGNvbnN0IHR5cGVGaWVsZFZhbGlkYXRvciA9IGRhdGF0eXBlcy5nZW5lcmljX3R5cGVfdmFsaWRhdG9yKGZpZWxkdHlwZSk7XG4gICAgY29uc3QgZmllbGQgPSBtb2RlbFNjaGVtYS5maWVsZHNbZmllbGRuYW1lXTtcblxuICAgIGlmICh0eXBlRmllbGRWYWxpZGF0b3IpIHtcbiAgICAgIGlmICghKGZpZWxkLnJ1bGUgJiYgZmllbGQucnVsZS50eXBlX3ZhbGlkYXRpb24gPT09IGZhbHNlKSkge1xuICAgICAgICB2YWxpZGF0b3JzLnB1c2godHlwZUZpZWxkVmFsaWRhdG9yKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGZpZWxkLnJ1bGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBpZiAodHlwZW9mIGZpZWxkLnJ1bGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgZmllbGQucnVsZSA9IHtcbiAgICAgICAgICB2YWxpZGF0b3I6IGZpZWxkLnJ1bGUsXG4gICAgICAgICAgbWVzc2FnZTogdGhpcy5nZXRfZ2VuZXJpY192YWxpZGF0aW9uX21lc3NhZ2UsXG4gICAgICAgIH07XG4gICAgICAgIHZhbGlkYXRvcnMucHVzaChmaWVsZC5ydWxlKTtcbiAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShmaWVsZC5ydWxlLnZhbGlkYXRvcnMpKSB7XG4gICAgICAgIGZpZWxkLnJ1bGUudmFsaWRhdG9ycy5mb3JFYWNoKChmaWVsZHJ1bGUpID0+IHtcbiAgICAgICAgICB2YWxpZGF0b3JzLnB1c2godGhpcy5mb3JtYXRfdmFsaWRhdGlvbl9ydWxlKGZpZWxkcnVsZSwgZmllbGRuYW1lKSk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIGlmIChmaWVsZC5ydWxlLnZhbGlkYXRvcikge1xuICAgICAgICB2YWxpZGF0b3JzLnB1c2godGhpcy5mb3JtYXRfdmFsaWRhdGlvbl9ydWxlKGZpZWxkLnJ1bGUsIGZpZWxkbmFtZSkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB2YWxpZGF0b3JzO1xuICB9LFxuXG4gIGdldF9maWVsZF90eXBlKG1vZGVsU2NoZW1hLCBmaWVsZE5hbWUpIHtcbiAgICBjb25zdCBmaWVsZE9iamVjdCA9IG1vZGVsU2NoZW1hLmZpZWxkc1tmaWVsZE5hbWVdO1xuXG4gICAgaWYgKHR5cGVvZiBmaWVsZE9iamVjdCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiBmaWVsZE9iamVjdDtcbiAgICB9XG4gICAgaWYgKF8uaXNQbGFpbk9iamVjdChmaWVsZE9iamVjdCkpIHtcbiAgICAgIHJldHVybiBmaWVsZE9iamVjdC50eXBlO1xuICAgIH1cbiAgICB0aHJvdyAobmV3IEVycm9yKGBUeXBlIG9mIGZpZWxkIFwiJHtmaWVsZE5hbWV9XCIgbm90IGRlZmluZWQgcHJvcGVybHlgKSk7XG4gIH0sXG5cbiAgaXNfcmVxdWlyZWRfZmllbGQobW9kZWxTY2hlbWEsIGZpZWxkTmFtZSkge1xuICAgIGlmIChtb2RlbFNjaGVtYS5maWVsZHNbZmllbGROYW1lXS5ydWxlICYmIG1vZGVsU2NoZW1hLmZpZWxkc1tmaWVsZE5hbWVdLnJ1bGUucmVxdWlyZWQpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG5cbiAgaXNfcHJpbWFyeV9rZXlfZmllbGQobW9kZWxTY2hlbWEsIGZpZWxkTmFtZSkge1xuICAgIGlmIChtb2RlbFNjaGVtYS5rZXkuaW5jbHVkZXMoZmllbGROYW1lKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlmIChtb2RlbFNjaGVtYS5rZXlbMF0gaW5zdGFuY2VvZiBBcnJheSAmJiBtb2RlbFNjaGVtYS5rZXlbMF0uaW5jbHVkZXMoZmllbGROYW1lKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcblxuICBpc19maWVsZF9kZWZhdWx0X3ZhbHVlX3ZhbGlkKG1vZGVsU2NoZW1hLCBmaWVsZE5hbWUpIHtcbiAgICBpZiAoXy5pc1BsYWluT2JqZWN0KG1vZGVsU2NoZW1hLmZpZWxkc1tmaWVsZE5hbWVdKSAmJiBtb2RlbFNjaGVtYS5maWVsZHNbZmllbGROYW1lXS5kZWZhdWx0KSB7XG4gICAgICBpZiAoXy5pc1BsYWluT2JqZWN0KG1vZGVsU2NoZW1hLmZpZWxkc1tmaWVsZE5hbWVdLmRlZmF1bHQpXG4gICAgICAgICAgJiYgIShtb2RlbFNjaGVtYS5maWVsZHNbZmllbGROYW1lXS5kZWZhdWx0LiRkYl9mdW5jdGlvbikpIHtcbiAgICAgICAgcmV0dXJuIFsnbWFwJywgJ2xpc3QnLCAnc2V0JywgJ2Zyb3plbiddLmluY2x1ZGVzKG1vZGVsU2NoZW1hLmZpZWxkc1tmaWVsZE5hbWVdLnR5cGUpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9LFxuXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHNjaGVtZXI7XG4iXX0=
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy92YWxpZGF0b3JzL3NjaGVtYS5qcyJdLCJuYW1lcyI6WyJfIiwicmVxdWlyZSIsInV0aWwiLCJkYXRhdHlwZXMiLCJzY2hlbWVyIiwidmFsaWRhdGVfdGFibGVfbmFtZSIsInRhYmxlTmFtZSIsInRlc3QiLCJoYXNfZmllbGQiLCJtb2RlbFNjaGVtYSIsImZpZWxkTmFtZSIsIm9wdGlvbkZpZWxkTmFtZXMiLCJvcHRpb25zIiwidGltZXN0YW1wcyIsInRpbWVzdGFtcE9wdGlvbnMiLCJjcmVhdGVkQXQiLCJ1cGRhdGVkQXQiLCJwdXNoIiwidmVyc2lvbnMiLCJ2ZXJzaW9uT3B0aW9ucyIsImtleSIsImhhcyIsImZpZWxkcyIsImluY2x1ZGVzIiwidmFsaWRhdGVfZmllbGQiLCJmaWVsZE9iamVjdCIsIkVycm9yIiwiZm9ybWF0IiwiZmllbGR0eXBlIiwiZ2V0X2ZpZWxkX3R5cGUiLCJ0eXBlRGVmIiwiaXNfZmllbGRfZGVmYXVsdF92YWx1ZV92YWxpZCIsInZhbGlkYXRlX3ByaW1hcnlfa2V5IiwidmlydHVhbCIsImlzQXJyYXkiLCJsZW5ndGgiLCJmb3JFYWNoIiwicGFydGl0aW9uS2V5RmllbGQiLCJwcmltYXJ5S2V5RmllbGQiLCJwcmltYXJ5S2V5SW5kZXgiLCJjbHVzdGVyaW5nX29yZGVyIiwiaXNQbGFpbk9iamVjdCIsImNsdXN0ZXJpbmdPcmRlciIsImNsdXN0ZXJpbmdGaWVsZE5hbWUiLCJ0b0xvd2VyQ2FzZSIsImluZGV4T2YiLCJ2YWxpZGF0ZV9tYXRlcmlhbGl6ZWRfdmlldyIsIm1hdGVyaWFsaXplZFZpZXdPYmplY3QiLCJtYXRlcmlhbGl6ZWRWaWV3TmFtZSIsInNlbGVjdCIsIm1hdGVyaWFsaXplZFZpZXdTZWxlY3RGaWVsZCIsIm1hdGVyaWFsaXplZFZpZXdQYXJ0aXRpb25LZXlGaWVsZCIsIm1hdGVyaWFsaXplZFZpZXdQcmltYXJ5S2V5RmllbGQiLCJtYXRlcmlhbGl6ZWRWaWV3UHJpbWFyeUtleUluZGV4IiwibXZDbHVzdGVyaW5nT3JkZXIiLCJtdmx1c3RlcmluZ0ZpZWxkTmFtZSIsInZhbGlkYXRlX2luZGV4IiwiaW5kZXhEZWYiLCJpbmRleE5hbWVMaXN0IiwicmVwbGFjZSIsInNwbGl0IiwidmFsaWRhdGVfY3VzdG9tX2luZGV4IiwiY3VzdG9tSW5kZXgiLCJvbiIsInVzaW5nIiwidmFsaWRhdGVfbW9kZWxfc2NoZW1hIiwiT2JqZWN0Iiwia2V5cyIsIm1hdGVyaWFsaXplZF92aWV3cyIsImluZGV4ZXMiLCJjdXN0b21faW5kZXgiLCJjdXN0b21faW5kZXhlcyIsImZvcm1hdF92YWxpZGF0aW9uX3J1bGUiLCJydWxlIiwiZmllbGRuYW1lIiwidmFsaWRhdG9yIiwibWVzc2FnZSIsImdldF9nZW5lcmljX3ZhbGlkYXRpb25fbWVzc2FnZSIsImYxIiwiYmluZCIsInZhbHVlIiwicHJvcE5hbWUiLCJnZXRfdmFsaWRhdGlvbl9tZXNzYWdlIiwidmFsaWRhdG9ycyIsIiRkYl9mdW5jdGlvbiIsInYiLCJnZXRfdmFsaWRhdG9ycyIsInR5cGVGaWVsZFZhbGlkYXRvciIsImdlbmVyaWNfdHlwZV92YWxpZGF0b3IiLCJmaWVsZCIsInR5cGVfdmFsaWRhdGlvbiIsIkFycmF5IiwiZmllbGRydWxlIiwidHlwZSIsImlzX3JlcXVpcmVkX2ZpZWxkIiwicmVxdWlyZWQiLCJpc19wcmltYXJ5X2tleV9maWVsZCIsImRlZmF1bHQiLCJtb2R1bGUiLCJleHBvcnRzIl0sIm1hcHBpbmdzIjoiOztBQUFBLElBQU1BLElBQUlDLFFBQVEsUUFBUixDQUFWO0FBQ0EsSUFBTUMsT0FBT0QsUUFBUSxNQUFSLENBQWI7O0FBRUEsSUFBTUUsWUFBWUYsUUFBUSxhQUFSLENBQWxCOztBQUVBLElBQU1HLFVBQVU7QUFDZEMsc0JBQW9CQyxTQUFwQixFQUErQjtBQUM3QixXQUFRLE9BQU9BLFNBQVAsS0FBcUIsUUFBckIsSUFBaUMsMEJBQTBCQyxJQUExQixDQUErQkQsU0FBL0IsQ0FBekM7QUFDRCxHQUhhO0FBSWRFLFlBQVVDLFdBQVYsRUFB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QU8sQ0FBQyxLQUFELEVBQVEsTUFBUixFQUFnQixLQUFoQixFQUF1QixRQUF2QixFQUFpQzdELFFBQWpDLENBQTBDZCxZQUFZYSxNQUFaLENBQW1CWixTQUFuQixFQUE4Qm1GLElBQXhFLENBQVA7QUFDRDtBQUNELGFBQU8sSUFBUDtBQUNEO0FBQ0QsV0FBTyxJQUFQO0FBQ0Q7O0FBbmFhLENBQWhCOztBQXVhQUssT0FBT0MsT0FBUCxHQUFpQi9GLE9BQWpCIiwiZmlsZSI6InNjaGVtYS5qcyIsInNvdXJjZXNDb250ZW50IjpbImNvbnN0IF8gPSByZXF1aXJlKCdsb2Rhc2gnKTtcbmNvbnN0IHV0aWwgPSByZXF1aXJlKCd1dGlsJyk7XG5cbmNvbnN0IGRhdGF0eXBlcyA9IHJlcXVpcmUoJy4vZGF0YXR5cGVzJyk7XG5cbmNvbnN0IHNjaGVtZXIgPSB7XG4gIHZhbGlkYXRlX3RhYmxlX25hbWUodGFibGVOYW1lKSB7XG4gICAgcmV0dXJuICh0eXBlb2YgdGFibGVOYW1lID09PSAnc3RyaW5nJyAmJiAvXlthLXpBLVpdK1thLXpBLVowLTlfXSovLnRlc3QodGFibGVOYW1lKSk7XG4gIH0sXG4gIGhhc19maWVsZChtb2RlbFNjaGVtYSwgZmllbGROYW1lKSB7XG4gICAgY29uc3Qgb3B0aW9uRmllbGROYW1lcyA9IFtdO1xuICAgIGlmIChtb2RlbFNjaGVtYS5vcHRpb25zKSB7XG4gICAgICBpZiAobW9kZWxTY2hlbWEub3B0aW9ucy50aW1lc3RhbXBzKSB7XG4gICAgICAgIGNvbnN0IHRpbWVzdGFtcE9wdGlvbnMgPSB7XG4gICAgICAgICAgY3JlYXRlZEF0OiBtb2RlbFNjaGVtYS5vcHRpb25zLnRpbWVzdGFtcHMuY3JlYXRlZEF0IHx8ICdjcmVhdGVkQXQnLFxuICAgICAgICAgIHVwZGF0ZWRBdDogbW9kZWxTY2hlbWEub3B0aW9ucy50aW1lc3RhbXBzLnVwZGF0ZWRBdCB8fCAndXBkYXRlZEF0JyxcbiAgICAgICAgfTtcbiAgICAgICAgb3B0aW9uRmllbGROYW1lcy5wdXNoKHRpbWVzdGFtcE9wdGlvbnMuY3JlYXRlZEF0KTtcbiAgICAgICAgb3B0aW9uRmllbGROYW1lcy5wdXNoKHRpbWVzdGFtcE9wdGlvbnMudXBkYXRlZEF0KTtcbiAgICAgIH1cblxuICAgICAgaWYgKG1vZGVsU2NoZW1hLm9wdGlvbnMudmVyc2lvbnMpIHtcbiAgICAgICAgY29uc3QgdmVyc2lvbk9wdGlvbnMgPSB7XG4gICAgICAgICAga2V5OiBtb2RlbFNjaGVtYS5vcHRpb25zLnZlcnNpb25zLmtleSB8fCAnX192JyxcbiAgICAgICAgfTtcbiAgICAgICAgb3B0aW9uRmllbGROYW1lcy5wdXNoKHZlcnNpb25PcHRpb25zLmtleSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBfLmhhcyhtb2RlbFNjaGVtYS5maWVsZHMsIGZpZWxkTmFtZSkgfHwgb3B0aW9uRmllbGROYW1lcy5pbmNsdWRlcyhmaWVsZE5hbWUpO1xuICB9LFxuICB2YWxpZGF0ZV9maWVsZChtb2RlbFNjaGVtYSwgZmllbGRPYmplY3QsIGZpZWxkTmFtZSkge1xuICAgIGlmICghZmllbGRPYmplY3QpIHtcbiAgICAgIHRocm93IChuZXcgRXJyb3IodXRpbC5mb3JtYXQoJ1NjaGVtYSBmaWVsZCBcIiVzXCIgaXMgbm90IHByb3Blcmx5IGRlZmluZWQnLCBmaWVsZE5hbWUpKSk7XG4gICAgfVxuICAgIGNvbnN0IGZpZWxkdHlwZSA9IHRoaXMuZ2V0X2ZpZWxkX3R5cGUobW9kZWxTY2hlbWEsIGZpZWxkTmFtZSk7XG4gICAgaWYgKCFfLmhhcyhkYXRhdHlwZXMsIGZpZWxkdHlwZSkpIHtcbiAgICAgIHRocm93IChuZXcgRXJyb3IodXRpbC5mb3JtYXQoJ0ludmFsaWQgZmllbGQgdHlwZSBcIiVzXCIgZm9yIGZpZWxkOiAlcycsIGZpZWxkdHlwZSwgZmllbGROYW1lKSkpO1xuICAgIH1cbiAgICBpZiAoWydtYXAnLCAnbGlzdCcsICdzZXQnLCAnZnJvemVuJ10uaW5jbHVkZXMoZmllbGR0eXBlKSkge1xuICAgICAgaWYgKCFmaWVsZE9iamVjdC50eXBlRGVmKSB7XG4gICAgICAgIHRocm93IChuZXcgRXJyb3IodXRpbC5mb3JtYXQoJ01pc3NpbmcgdHlwZURlZiBmb3IgZmllbGQgdHlwZSBcIiVzXCIgb24gZmllbGQ6ICVzJywgZmllbGR0eXBlLCBmaWVsZE5hbWUpKSk7XG4gICAgICB9XG4gICAgICBpZiAodHlwZW9mIGZpZWxkT2JqZWN0LnR5cGVEZWYgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHRocm93IChuZXcgRXJyb3IodXRpbC5mb3JtYXQoJ0ludmFsaWQgdHlwZURlZiBmb3IgZmllbGQgdHlwZSBcIiVzXCIgb24gZmllbGQ6ICVzJywgZmllbGR0eXBlLCBmaWVsZE5hbWUpKSk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICghKHRoaXMuaXNfZmllbGRfZGVmYXVsdF92YWx1ZV92YWxpZChtb2RlbFNjaGVtYSwgZmllbGROYW1lKSkpIHtcbiAgICAgIHRocm93IChuZXcgRXJyb3IodXRpbC5mb3JtYXQoJ0ludmFsaWQgZGVmYXVsdCB2YWx1ZSBmb3IgZmllbGQ6ICVzKCVzKScsIGZpZWxkTmFtZSwgZmllbGR0eXBlKSkpO1xuICAgIH1cbiAgfSxcblxuICB2YWxpZGF0ZV9wcmltYXJ5X2tleShtb2RlbFNjaGVtYSkge1xuICAgIGlmICh0eXBlb2YgKG1vZGVsU2NoZW1hLmtleVswXSkgPT09ICdzdHJpbmcnKSB7XG4gICAgICBpZiAoIXRoaXMuaGFzX2ZpZWxkKG1vZGVsU2NoZW1hLCBtb2RlbFNjaGVtYS5rZXlbMF0pKSB7XG4gICAgICAgIHRocm93IChuZXcgRXJyb3IoJ1BhcnRpdGlvbiBLZXkgbXVzdCBhbHNvIGJlIGEgdmFsaWQgZmllbGQgbmFtZScpKTtcbiAgICAgIH1cbiAgICAgIGlmIChtb2RlbFNjaGVtYS5maWVsZHNbbW9kZWxTY2hlbWEua2V5WzBdXSAmJiBtb2RlbFNjaGVtYS5maWVsZHNbbW9kZWxTY2hlbWEua2V5WzBdXS52aXJ0dWFsKSB7XG4gICAgICAgIHRocm93IChuZXcgRXJyb3IoXCJQYXJ0aXRpb24gS2V5IG11c3QgYWxzbyBiZSBhIGRiIGZpZWxkIG5hbWUsIGNhbid0IGJlIGEgdmlydHVhbCBmaWVsZCBuYW1lXCIpKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKF8uaXNBcnJheShtb2RlbFNjaGVtYS5rZXlbMF0pKSB7XG4gICAgICBpZiAobW9kZWxTY2hlbWEua2V5WzBdLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB0aHJvdyAobmV3IEVycm9yKFwiUGFydGl0aW9uIEtleSBhcnJheSBjYW4ndCBiZSBlbXB0eVwiKSk7XG4gICAgICB9XG4gICAgICBtb2RlbFNjaGVtYS5rZXlbMF0uZm9yRWFjaCgocGFydGl0aW9uS2V5RmllbGQpID0+IHtcbiAgICAgICAgaWYgKCh0eXBlb2YgKHBhcnRpdGlvbktleUZpZWxkKSAhPT0gJ3N0cmluZycpIHx8ICF0aGlzLmhhc19maWVsZChtb2RlbFNjaGVtYSwgcGFydGl0aW9uS2V5RmllbGQpKSB7XG4gICAgICAgICAgdGhyb3cgKG5ldyBFcnJvcignUGFydGl0aW9uIEtleSBhcnJheSBtdXN0IGNvbnRhaW4gb25seSB2YWxpZCBmaWVsZCBuYW1lcycpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobW9kZWxTY2hlbWEuZmllbGRzW3BhcnRpdGlvbktleUZpZWxkXSAmJiBtb2RlbFNjaGVtYS5maWVsZHNbcGFydGl0aW9uS2V5RmllbGRdLnZpcnR1YWwpIHtcbiAgICAgICAgICB0aHJvdyAobmV3IEVycm9yKFwiUGFydGl0aW9uIEtleSBhcnJheSBtdXN0IGNvbnRhaW4gb25seSBkYiBmaWVsZCBuYW1lcywgY2FuJ3QgY29udGFpbiB2aXJ0dWFsIGZpZWxkIG5hbWVzXCIpKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IChuZXcgRXJyb3IoJ1BhcnRpdGlvbiBLZXkgbXVzdCBiZSBhIGZpZWxkIG5hbWUgc3RyaW5nLCBvciBhcnJheSBvZiBmaWVsZCBuYW1lcycpKTtcbiAgICB9XG5cbiAgICBtb2RlbFNjaGVtYS5rZXkuZm9yRWFjaCgocHJpbWFyeUtleUZpZWxkLCBwcmltYXJ5S2V5SW5kZXgpID0+IHtcbiAgICAgIGlmIChwcmltYXJ5S2V5SW5kZXggPiAwKSB7XG4gICAgICAgIGlmICgodHlwZW9mIChwcmltYXJ5S2V5RmllbGQpICE9PSAnc3RyaW5nJykgfHwgIXRoaXMuaGFzX2ZpZWxkKG1vZGVsU2NoZW1hLCBwcmltYXJ5S2V5RmllbGQpKSB7XG4gICAgICAgICAgdGhyb3cgKG5ldyBFcnJvcignQ2x1c3RlcmluZyBLZXlzIG11c3QgYmUgdmFsaWQgZmllbGQgbmFtZXMnKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1vZGVsU2NoZW1hLmZpZWxkc1twcmltYXJ5S2V5RmllbGRdICYmIG1vZGVsU2NoZW1hLmZpZWxkc1twcmltYXJ5S2V5RmllbGRdLnZpcnR1YWwpIHtcbiAgICAgICAgICB0aHJvdyAobmV3IEVycm9yKFwiQ2x1c3RlcmluZyBLZXlzIG11c3QgYmUgZGIgZmllbGQgbmFtZXMsIGNhbid0IGJlIHZpcnR1YWwgZmllbGQgbmFtZXNcIikpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAobW9kZWxTY2hlbWEuY2x1c3RlcmluZ19vcmRlcikge1xuICAgICAgaWYgKCFfLmlzUGxhaW5PYmplY3QobW9kZWxTY2hlbWEuY2x1c3RlcmluZ19vcmRlcikpIHtcbiAgICAgICAgdGhyb3cgKG5ldyBFcnJvcignY2x1c3RlcmluZ19vcmRlciBtdXN0IGJlIGFuIG9iamVjdCBvZiBjbHVzdGVyaW5nX2tleSBhdHRyaWJ1dGVzJykpO1xuICAgICAgfVxuXG4gICAgICBfLmZvckVhY2gobW9kZWxTY2hlbWEuY2x1c3RlcmluZ19vcmRlciwgKGNsdXN0ZXJpbmdPcmRlciwgY2x1c3RlcmluZ0ZpZWxkTmFtZSkgPT4ge1xuICAgICAgICBpZiAoIVsnYXNjJywgJ2Rlc2MnXS5pbmNsdWRlcyhjbHVzdGVyaW5nT3JkZXIudG9Mb3dlckNhc2UoKSkpIHtcbiAgICAgICAgICB0aHJvdyAobmV3IEVycm9yKCdjbHVzdGVyaW5nX29yZGVyIGF0dHJpYnV0ZSB2YWx1ZXMgY2FuIG9ubHkgYmUgQVNDIG9yIERFU0MnKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1vZGVsU2NoZW1hLmtleS5pbmRleE9mKGNsdXN0ZXJpbmdGaWVsZE5hbWUpIDwgMSkge1xuICAgICAgICAgIHRocm93IChuZXcgRXJyb3IoJ2NsdXN0ZXJpbmdfb3JkZXIgZmllbGQgYXR0cmlidXRlcyBtdXN0IGJlIGNsdXN0ZXJpbmcga2V5cyBvbmx5JykpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH0sXG5cbiAgdmFsaWRhdGVfbWF0ZXJpYWxpemVkX3ZpZXcobW9kZWxTY2hlbWEsIG1hdGVyaWFsaXplZFZpZXdPYmplY3QsIG1hdGVyaWFsaXplZFZpZXdOYW1lKSB7XG4gICAgaWYgKCFfLmlzUGxhaW5PYmplY3QobWF0ZXJpYWxpemVkVmlld09iamVjdCkpIHtcbiAgICAgIHRocm93IChuZXcgRXJyb3IodXRpbC5mb3JtYXQoJ2F0dHJpYnV0ZSBcIiVzXCIgdW5kZXIgbWF0ZXJpYWxpemVkX3ZpZXdzIG11c3QgYmUgYW4gb2JqZWN0JywgbWF0ZXJpYWxpemVkVmlld05hbWUpKSk7XG4gICAgfVxuXG4gICAgaWYgKCFtYXRlcmlhbGl6ZWRWaWV3T2JqZWN0LnNlbGVjdCB8fCAhbWF0ZXJpYWxpemVkVmlld09iamVjdC5rZXkpIHtcbiAgICAgIHRocm93IChuZXcgRXJyb3IodXRpbC5mb3JtYXQoJ21hdGVyaWFsaXplZF92aWV3IFwiJXNcIiBtdXN0IGhhdmUgXCJzZWxlY3RcIiBhbmQgXCJrZXlcIiBhdHRyaWJ1dGVzJywgbWF0ZXJpYWxpemVkVmlld05hbWUpKSk7XG4gICAgfVxuXG4gICAgaWYgKCFfLmlzQXJyYXkobWF0ZXJpYWxpemVkVmlld09iamVjdC5zZWxlY3QpIHx8ICFfLmlzQXJyYXkobWF0ZXJpYWxpemVkVmlld09iamVjdC5rZXkpKSB7XG4gICAgICB0aHJvdyAobmV3IEVycm9yKHV0aWwuZm9ybWF0KCdcInNlbGVjdFwiIGFuZCBcImtleVwiIGF0dHJpYnV0ZXMgbXVzdCBiZSBhbiBhcnJheSB1bmRlciBhdHRyaWJ1dGUgJXMgb2YgbWF0ZXJpYWxpemVkX3ZpZXdzJywgbWF0ZXJpYWxpemVkVmlld05hbWUpKSk7XG4gICAgfVxuXG4gICAgbWF0ZXJpYWxpemVkVmlld09iamVjdC5zZWxlY3QuZm9yRWFjaCgobWF0ZXJpYWxpemVkVmlld1NlbGVjdEZpZWxkKSA9PiB7XG4gICAgICBpZiAoKHR5cGVvZiAobWF0ZXJpYWxpemVkVmlld1NlbGVjdEZpZWxkKSAhPT0gJ3N0cmluZycpXG4gICAgICAgICAgICB8fCAhKHRoaXMuaGFzX2ZpZWxkKG1vZGVsU2NoZW1hLCBtYXRlcmlhbGl6ZWRWaWV3U2VsZWN0RmllbGQpXG4gICAgICAgICAgICB8fCBtYXRlcmlhbGl6ZWRWaWV3U2VsZWN0RmllbGQgPT09ICcqJykpIHtcbiAgICAgICAgdGhyb3cgKG5ldyBFcnJvcih1dGlsLmZvcm1hdChcbiAgICAgICAgICAndGhlIHNlbGVjdCBhdHRyaWJ1dGUgdW5kZXIgbWF0ZXJpYWxpemVkX3ZpZXcgJXMgbXVzdCBiZSBhbiBhcnJheSBvZiBmaWVsZCBuYW1lIHN0cmluZ3Mgb3IgW1wiKlwiXScsXG4gICAgICAgICAgbWF0ZXJpYWxpemVkVmlld05hbWUsXG4gICAgICAgICkpKTtcbiAgICAgIH1cblxuICAgICAgaWYgKG1vZGVsU2NoZW1hLmZpZWxkc1ttYXRlcmlhbGl6ZWRWaWV3U2VsZWN0RmllbGRdXG4gICAgICAgICAgJiYgbW9kZWxTY2hlbWEuZmllbGRzW21hdGVyaWFsaXplZFZpZXdTZWxlY3RGaWVsZF0udmlydHVhbCkge1xuICAgICAgICB0aHJvdyAobmV3IEVycm9yKHV0aWwuZm9ybWF0KFxuICAgICAgICAgICd0aGUgc2VsZWN0IGF0dHJpYnV0ZSB1bmRlciAlcyBvZiBtYXRlcmlhbGl6ZWRfdmlld3MgbXVzdCBiZSBhbiBhcnJheSBvZiBkYiBmaWVsZCBuYW1lcywgJ1xuICAgICAgICAgICsgJ2Nhbm5vdCBjb250YWluIGFueSB2aXJ0dWFsIGZpZWxkIG5hbWUnLFxuICAgICAgICAgIG1hdGVyaWFsaXplZFZpZXdOYW1lLFxuICAgICAgICApKSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyB2YWxpZGF0ZSBtYXRlcmlhbGl6ZWRfdmlldyBwcmltYXJ5IGtleVxuICAgIGlmICh0eXBlb2YgKG1hdGVyaWFsaXplZFZpZXdPYmplY3Qua2V5WzBdKSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGlmICghdGhpcy5oYXNfZmllbGQobW9kZWxTY2hlbWEsIG1hdGVyaWFsaXplZFZpZXdPYmplY3Qua2V5WzBdKSkge1xuICAgICAgICB0aHJvdyAobmV3IEVycm9yKHV0aWwuZm9ybWF0KCdtYXRlcmlhbGl6ZWRfdmlldyAlczogcGFydGl0aW9uIGtleSBzdHJpbmcgbXVzdCBtYXRjaCBhIHZhbGlkIGZpZWxkIG5hbWUnLCBtYXRlcmlhbGl6ZWRWaWV3TmFtZSkpKTtcbiAgICAgIH1cbiAgICAgIGlmIChtb2RlbFNjaGVtYS5maWVsZHNbbWF0ZXJpYWxpemVkVmlld09iamVjdC5rZXlbMF1dXG4gICAgICAgICYmIG1vZGVsU2NoZW1hLmZpZWxkc1ttYXRlcmlhbGl6ZWRWaWV3T2JqZWN0LmtleVswXV0udmlydHVhbCkge1xuICAgICAgICB0aHJvdyAobmV3IEVycm9yKHV0aWwuZm9ybWF0KFxuICAgICAgICAgICdtYXRlcmlhbGl6ZWRfdmlldyAlczogcGFydGl0aW9uIGtleSBtdXN0IG1hdGNoIGEgZGIgZmllbGQgbmFtZSwgY2Fubm90IGJlIGEgdmlydHVhbCBmaWVsZCBuYW1lJyxcbiAgICAgICAgICBtYXRlcmlhbGl6ZWRWaWV3TmFtZSxcbiAgICAgICAgKSkpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoXy5pc0FycmF5KG1hdGVyaWFsaXplZFZpZXdPYmplY3Qua2V5WzBdKSkge1xuICAgICAgaWYgKG1hdGVyaWFsaXplZFZpZXdPYmplY3Qua2V5WzBdLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB0aHJvdyAobmV3IEVycm9yKHV0aWwuZm9ybWF0KCdtYXRlcmlhbGl6ZWRfdmlldyAlczogcGFydGl0aW9uIGtleSBhcnJheSBjYW5ub3QgYmUgZW1wdHknLCBtYXRlcmlhbGl6ZWRWaWV3TmFtZSkpKTtcbiAgICAgIH1cbiAgICAgIG1hdGVyaWFsaXplZFZpZXdPYmplY3Qua2V5WzBdLmZvckVhY2goKG1hdGVyaWFsaXplZFZpZXdQYXJ0aXRpb25LZXlGaWVsZCkgPT4ge1xuICAgICAgICBpZiAoKHR5cGVvZiAobWF0ZXJpYWxpemVkVmlld1BhcnRpdGlvbktleUZpZWxkKSAhPT0gJ3N0cmluZycpXG4gICAgICAgICAgICB8fCAhdGhpcy5oYXNfZmllbGQobW9kZWxTY2hlbWEsIG1hdGVyaWFsaXplZFZpZXdQYXJ0aXRpb25LZXlGaWVsZCkpIHtcbiAgICAgICAgICB0aHJvdyAobmV3IEVycm9yKHV0aWwuZm9ybWF0KFxuICAgICAgICAgICAgJ21hdGVyaWFsaXplZF92aWV3ICVzOiBwYXJ0aXRpb24ga2V5IGFycmF5IG11c3QgY29udGFpbiBvbmx5IHZhbGlkIGZpZWxkIG5hbWVzJyxcbiAgICAgICAgICAgIG1hdGVyaWFsaXplZFZpZXdOYW1lLFxuICAgICAgICAgICkpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobW9kZWxTY2hlbWEuZmllbGRzW21hdGVyaWFsaXplZFZpZXdQYXJ0aXRpb25LZXlGaWVsZF1cbiAgICAgICAgICAmJiBtb2RlbFNjaGVtYS5maWVsZHNbbWF0ZXJpYWxpemVkVmlld1BhcnRpdGlvbktleUZpZWxkXS52aXJ0dWFsKSB7XG4gICAgICAgICAgdGhyb3cgKG5ldyBFcnJvcih1dGlsLmZvcm1hdChcbiAgICAgICAgICAgICdtYXRlcmlhbGl6ZWRfdmlldyAlczogcGFydGl0aW9uIGtleSBhcnJheSBtdXN0IGNvbnRhaW4gb25seSBkYiBmaWVsZCBuYW1lcywgJ1xuICAgICAgICAgICAgKyAnY2Fubm90IGNvbnRhaW4gdmlydHVhbCBmaWVsZCBuYW1lcycsXG4gICAgICAgICAgICBtYXRlcmlhbGl6ZWRWaWV3TmFtZSxcbiAgICAgICAgICApKSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyAobmV3IEVycm9yKHV0aWwuZm9ybWF0KFxuICAgICAgICAnbWF0ZXJpYWxpemVkX3ZpZXcgJXM6IHBhcnRpdGlvbiBrZXkgbXVzdCBiZSBhIGZpZWxkIG5hbWUgc3RyaW5nLCBvciBhcnJheSBvZiBmaWVsZCBuYW1lcycsXG4gICAgICAgIG1hdGVyaWFsaXplZFZpZXdOYW1lLFxuICAgICAgKSkpO1xuICAgIH1cblxuICAgIG1hdGVyaWFsaXplZFZpZXdPYmplY3Qua2V5LmZvckVhY2goKG1hdGVyaWFsaXplZFZpZXdQcmltYXJ5S2V5RmllbGQsIG1hdGVyaWFsaXplZFZpZXdQcmltYXJ5S2V5SW5kZXgpID0+IHtcbiAgICAgIGlmIChtYXRlcmlhbGl6ZWRWaWV3UHJpbWFyeUtleUluZGV4ID4gMCkge1xuICAgICAgICBpZiAoKHR5cGVvZiAobWF0ZXJpYWxpemVkVmlld1ByaW1hcnlLZXlGaWVsZCkgIT09ICdzdHJpbmcnKVxuICAgICAgICAgICAgfHwgIXRoaXMuaGFzX2ZpZWxkKG1vZGVsU2NoZW1hLCBtYXRlcmlhbGl6ZWRWaWV3UHJpbWFyeUtleUZpZWxkKSkge1xuICAgICAgICAgIHRocm93IChuZXcgRXJyb3IodXRpbC5mb3JtYXQoJ21hdGVyaWFsaXplZF92aWV3ICVzOiBjbHVzdGVyaW5nIGtleXMgbXVzdCBiZSB2YWxpZCBmaWVsZCBuYW1lcycsIG1hdGVyaWFsaXplZFZpZXdOYW1lKSkpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtb2RlbFNjaGVtYS5maWVsZHNbbWF0ZXJpYWxpemVkVmlld1ByaW1hcnlLZXlGaWVsZF1cbiAgICAgICAgICAmJiBtb2RlbFNjaGVtYS5maWVsZHNbbWF0ZXJpYWxpemVkVmlld1ByaW1hcnlLZXlGaWVsZF0udmlydHVhbCkge1xuICAgICAgICAgIHRocm93IChuZXcgRXJyb3IodXRpbC5mb3JtYXQoXG4gICAgICAgICAgICAnbWF0ZXJpYWxpemVkX3ZpZXcgJXM6IGNsdXN0ZXJpbmcga2V5cyBtdXN0IGJlIGRiIGZpZWxkIG5hbWVzLCBjYW5ub3QgY29udGFpbiB2aXJ0dWFsIGZpZWxkcycsXG4gICAgICAgICAgICBtYXRlcmlhbGl6ZWRWaWV3TmFtZSxcbiAgICAgICAgICApKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmIChtYXRlcmlhbGl6ZWRWaWV3T2JqZWN0LmNsdXN0ZXJpbmdfb3JkZXIpIHtcbiAgICAgIGlmICghXy5pc1BsYWluT2JqZWN0KG1hdGVyaWFsaXplZFZpZXdPYmplY3QuY2x1c3RlcmluZ19vcmRlcikpIHtcbiAgICAgICAgdGhyb3cgKG5ldyBFcnJvcih1dGlsLmZvcm1hdChcbiAgICAgICAgICAnbWF0ZXJpYWxpemVkX3ZpZXcgJXM6IGNsdXN0ZXJpbmdfb3JkZXIgbXVzdCBiZSBhbiBvYmplY3Qgb2YgY2x1c3RlcmluZ19rZXkgYXR0cmlidXRlcycsXG4gICAgICAgICAgbWF0ZXJpYWxpemVkVmlld05hbWUsXG4gICAgICAgICkpKTtcbiAgICAgIH1cblxuICAgICAgXy5mb3JFYWNoKG1hdGVyaWFsaXplZFZpZXdPYmplY3QuY2x1c3RlcmluZ19vcmRlciwgKG12Q2x1c3RlcmluZ09yZGVyLCBtdmx1c3RlcmluZ0ZpZWxkTmFtZSkgPT4ge1xuICAgICAgICBpZiAoIVsnYXNjJywgJ2Rlc2MnXS5pbmNsdWRlcyhtdkNsdXN0ZXJpbmdPcmRlci50b0xvd2VyQ2FzZSgpKSkge1xuICAgICAgICAgIHRocm93IChuZXcgRXJyb3IodXRpbC5mb3JtYXQoJ21hdGVyaWFsaXplZF92aWV3ICVzOiBjbHVzdGVyaW5nX29yZGVyIGF0dHJpYnV0ZSB2YWx1ZXMgY2FuIG9ubHkgYmUgQVNDIG9yIERFU0MnLCBtYXRlcmlhbGl6ZWRWaWV3TmFtZSkpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWF0ZXJpYWxpemVkVmlld09iamVjdC5rZXkuaW5kZXhPZihtdmx1c3RlcmluZ0ZpZWxkTmFtZSkgPCAxKSB7XG4gICAgICAgICAgdGhyb3cgKG5ldyBFcnJvcih1dGlsLmZvcm1hdChcbiAgICAgICAgICAgICdtYXRlcmlhbGl6ZWRfdmlldyAlczogY2x1c3RlcmluZ19vcmRlciBmaWVsZCBhdHRyaWJ1dGVzIG11c3QgYmUgY2x1c3RlcmluZyBrZXlzIG9ubHknLFxuICAgICAgICAgICAgbWF0ZXJpYWxpemVkVmlld05hbWUsXG4gICAgICAgICAgKSkpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH0sXG5cbiAgdmFsaWRhdGVfaW5kZXgobW9kZWxTY2hlbWEsIGluZGV4RGVmKSB7XG4gICAgaWYgKHR5cGVvZiBpbmRleERlZiAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IChuZXcgRXJyb3IoJ2luZGV4ZXMgbXVzdCBiZSBhbiBhcnJheSBvZiBzdHJpbmdzJykpO1xuICAgIH1cblxuICAgIGNvbnN0IGluZGV4TmFtZUxpc3QgPSBpbmRleERlZi5yZXBsYWNlKC9bXCJcXHNdL2csICcnKS5zcGxpdCgvWygpXS9nKTtcbiAgICBpZiAoaW5kZXhOYW1lTGlzdC5sZW5ndGggPiAxKSB7XG4gICAgICBpbmRleE5hbWVMaXN0WzBdID0gaW5kZXhOYW1lTGlzdFswXS50b0xvd2VyQ2FzZSgpO1xuICAgICAgaWYgKCFbJ2VudHJpZXMnLCAna2V5cycsICd2YWx1ZXMnLCAnZnVsbCddLmluY2x1ZGVzKGluZGV4TmFtZUxpc3RbMF0pKSB7XG4gICAgICAgIHRocm93IChuZXcgRXJyb3IodXRpbC5mb3JtYXQoJ2luZGV4IFwiJXNcIiBpcyBub3QgZGVmaW5lZCBwcm9wZXJseScsIGluZGV4RGVmKSkpO1xuICAgICAgfVxuICAgICAgaWYgKCF0aGlzLmhhc19maWVsZChtb2RlbFNjaGVtYSwgaW5kZXhOYW1lTGlzdFsxXSkpIHtcbiAgICAgICAgdGhyb3cgKG5ldyBFcnJvcih1dGlsLmZvcm1hdCgnXCIlc1wiIGlzIG5vdCBhIHZhbGlkIGZpZWxkIG5hbWUsIGluZGV4ZXMgbXVzdCBiZSBkZWZpbmVkIG9uIGZpZWxkIG5hbWVzJywgaW5kZXhOYW1lTGlzdFsxXSkpKTtcbiAgICAgIH1cbiAgICAgIGlmIChtb2RlbFNjaGVtYS5maWVsZHNbaW5kZXhOYW1lTGlzdFsxXV0gJiYgbW9kZWxTY2hlbWEuZmllbGRzW2luZGV4TmFtZUxpc3RbMV1dLnZpcnR1YWwpIHtcbiAgICAgICAgdGhyb3cgKG5ldyBFcnJvcihcImluZGV4ZXMgbXVzdCBiZSBhbiBhcnJheSBvZiBkYiBmaWVsZCBuYW1lcywgY2FuJ3QgY29udGFpbiB2aXJ0dWFsIGZpZWxkc1wiKSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICghdGhpcy5oYXNfZmllbGQobW9kZWxTY2hlbWEsIGluZGV4TmFtZUxpc3RbMF0pKSB7XG4gICAgICAgIHRocm93IChuZXcgRXJyb3IodXRpbC5mb3JtYXQoJ1wiJXNcIiBpcyBub3QgYSB2YWxpZCBmaWVsZCwgaW5kZXhlcyBtdXN0IGJlIGRlZmluZWQgb24gZmllbGQgbmFtZXMnLCBpbmRleE5hbWVMaXN0WzBdKSkpO1xuICAgICAgfVxuICAgICAgaWYgKG1vZGVsU2NoZW1hLmZpZWxkc1tpbmRleE5hbWVMaXN0WzBdXSAmJiBtb2RlbFNjaGVtYS5maWVsZHNbaW5kZXhOYW1lTGlzdFswXV0udmlydHVhbCkge1xuICAgICAgICB0aHJvdyAobmV3IEVycm9yKFwiaW5kZXhlcyBtdXN0IGJlIGFuIGFycmF5IG9mIGRiIGZpZWxkIG5hbWVzLCBjYW4ndCBjb250YWluIHZpcnR1YWwgZmllbGRzXCIpKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgdmFsaWRhdGVfY3VzdG9tX2luZGV4KG1vZGVsU2NoZW1hLCBjdXN0b21JbmRleCkge1xuICAgIGlmICghXy5pc1BsYWluT2JqZWN0KGN1c3RvbUluZGV4KSkge1xuICAgICAgdGhyb3cgKG5ldyBFcnJvcignY3VzdG9tX2luZGV4IG11c3QgYmUgYW4gb2JqZWN0IHdpdGggcHJvcGVyIGluZGV4aW5nIGF0dHJpYnV0ZXMnKSk7XG4gICAgfVxuICAgIGlmICgodHlwZW9mIChjdXN0b21JbmRleC5vbikgIT09ICdzdHJpbmcnKSB8fCAhdGhpcy5oYXNfZmllbGQobW9kZWxTY2hlbWEsIGN1c3RvbUluZGV4Lm9uKSkge1xuICAgICAgdGhyb3cgKG5ldyBFcnJvcihcImN1c3RvbV9pbmRleCBtdXN0IGhhdmUgYW4gJ29uJyBhdHRyaWJ1dGUgd2l0aCBzdHJpbmcgdmFsdWUgYW5kIHZhbHVlIG11c3QgYmUgYSB2YWxpZCBmaWVsZCBuYW1lXCIpKTtcbiAgICB9XG4gICAgaWYgKG1vZGVsU2NoZW1hLmZpZWxkc1tjdXN0b21JbmRleC5vbl0gJiYgbW9kZWxTY2hlbWEuZmllbGRzW2N1c3RvbUluZGV4Lm9uXS52aXJ0dWFsKSB7XG4gICAgICB0aHJvdyAobmV3IEVycm9yKFwiY3VzdG9tX2luZGV4ICdvbicgYXR0cmlidXRlIG11c3QgYmUgYSBkYiBmaWVsZCBuYW1lLCBjYW4ndCBjb250YWluIHZpcnR1YWwgZmllbGRzXCIpKTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiAoY3VzdG9tSW5kZXgudXNpbmcpICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgKG5ldyBFcnJvcihcImN1c3RvbV9pbmRleCBtdXN0IGhhdmUgYSAndXNpbmcnIGF0dHJpYnV0ZSB3aXRoIHN0cmluZyB2YWx1ZVwiKSk7XG4gICAgfVxuICAgIGlmICghXy5pc1BsYWluT2JqZWN0KGN1c3RvbUluZGV4Lm9wdGlvbnMpKSB7XG4gICAgICB0aHJvdyAobmV3IEVycm9yKCdjdXN0b21faW5kZXggbXVzdCBoYXZlIGFuIFwib3B0aW9uc1wiIGF0dHJpYnV0ZSBhbmQgaXQgbXVzdCBiZSBhbiBvYmplY3QsICdcbiAgICAgICAgKyAncGFzcyBibGFuayB7fSBvYmplY3QgaWYgbm8gb3B0aW9ucyBhcmUgcmVxdWlyZWQnKSk7XG4gICAgfVxuICB9LFxuXG4gIHZhbGlkYXRlX21vZGVsX3NjaGVtYShtb2RlbFNjaGVtYSkge1xuICAgIGlmICghbW9kZWxTY2hlbWEpIHtcbiAgICAgIHRocm93IChuZXcgRXJyb3IoJ0Egc2NoZW1hIG11c3QgYmUgc3BlY2lmaWVkJykpO1xuICAgIH1cblxuICAgIGlmICghXy5pc1BsYWluT2JqZWN0KG1vZGVsU2NoZW1hLmZpZWxkcykgfHwgT2JqZWN0LmtleXMobW9kZWxTY2hlbWEuZmllbGRzKS5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IChuZXcgRXJyb3IoJ1NjaGVtYSBtdXN0IGNvbnRhaW4gYSBub24tZW1wdHkgXCJmaWVsZHNcIiBtYXAgb2JqZWN0JykpO1xuICAgIH1cblxuICAgIGlmICghbW9kZWxTY2hlbWEua2V5IHx8ICFfLmlzQXJyYXkobW9kZWxTY2hlbWEua2V5KSkge1xuICAgICAgdGhyb3cgKG5ldyBFcnJvcignU2NoZW1hIG11c3QgY29udGFpbiBcImtleVwiIGluIHRoZSBmb3JtOiBbIFtwYXJ0aXRpb25rZXkxLCAuLi5dLCBjbHVzdGVyaW5na2V5MSwgLi4uXScpKTtcbiAgICB9XG5cbiAgICBfLmZvckVhY2gobW9kZWxTY2hlbWEuZmllbGRzLCAoZmllbGRPYmplY3QsIGZpZWxkTmFtZSkgPT4ge1xuICAgICAgdGhpcy52YWxpZGF0ZV9maWVsZChtb2RlbFNjaGVtYSwgZmllbGRPYmplY3QsIGZpZWxkTmFtZSk7XG4gICAgfSk7XG5cbiAgICB0aGlzLnZhbGlkYXRlX3ByaW1hcnlfa2V5KG1vZGVsU2NoZW1hKTtcblxuICAgIGlmIChtb2RlbFNjaGVtYS5tYXRlcmlhbGl6ZWRfdmlld3MpIHtcbiAgICAgIGlmICghXy5pc1BsYWluT2JqZWN0KG1vZGVsU2NoZW1hLm1hdGVyaWFsaXplZF92aWV3cykpIHtcbiAgICAgICAgdGhyb3cgKG5ldyBFcnJvcignbWF0ZXJpYWxpemVkX3ZpZXdzIG11c3QgYmUgYW4gb2JqZWN0IHdpdGggdmlldyBuYW1lcyBhcyBhdHRyaWJ1dGVzJykpO1xuICAgICAgfVxuICAgICAgXy5mb3JFYWNoKG1vZGVsU2NoZW1hLm1hdGVyaWFsaXplZF92aWV3cywgKG1hdGVyaWFsaXplZFZpZXdPYmplY3QsIG1hdGVyaWFsaXplZFZpZXdOYW1lKSA9PiB7XG4gICAgICAgIHRoaXMudmFsaWRhdGVfbWF0ZXJpYWxpemVkX3ZpZXcobW9kZWxTY2hlbWEsIG1hdGVyaWFsaXplZFZpZXdPYmplY3QsIG1hdGVyaWFsaXplZFZpZXdOYW1lKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChtb2RlbFNjaGVtYS5pbmRleGVzKSB7XG4gICAgICBpZiAoIV8uaXNBcnJheShtb2RlbFNjaGVtYS5pbmRleGVzKSkge1xuICAgICAgICB0aHJvdyAobmV3IEVycm9yKCdpbmRleGVzIG11c3QgYmUgYW4gYXJyYXkgb2YgZmllbGQgbmFtZSBzdHJpbmdzJykpO1xuICAgICAgfVxuXG4gICAgICBtb2RlbFNjaGVtYS5pbmRleGVzLmZvckVhY2goKGluZGV4RGVmKSA9PiB7XG4gICAgICAgIHRoaXMudmFsaWRhdGVfaW5kZXgobW9kZWxTY2hlbWEsIGluZGV4RGVmKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChtb2RlbFNjaGVtYS5jdXN0b21faW5kZXggJiYgbW9kZWxTY2hlbWEuY3VzdG9tX2luZGV4ZXMpIHtcbiAgICAgIHRocm93IChuZXcgRXJyb3IoJ2JvdGggY3VzdG9tX2luZGV4IGFuZCBjdXN0b21faW5kZXhlcyBhcmUgZGVmaW5lZCBpbiBzY2hlbWEsIG9ubHkgb25lIG9mIHRoZW0gc2hvdWxkIGJlIGRlZmluZWQnKSk7XG4gICAgfVxuXG4gICAgaWYgKG1vZGVsU2NoZW1hLmN1c3RvbV9pbmRleCkge1xuICAgICAgdGhpcy52YWxpZGF0ZV9jdXN0b21faW5kZXgobW9kZWxTY2hlbWEsIG1vZGVsU2NoZW1hLmN1c3RvbV9pbmRleCk7XG4gICAgfVxuXG4gICAgaWYgKG1vZGVsU2NoZW1hLmN1c3RvbV9pbmRleGVzKSB7XG4gICAgICBpZiAoIV8uaXNBcnJheShtb2RlbFNjaGVtYS5jdXN0b21faW5kZXhlcykpIHtcbiAgICAgICAgdGhyb3cgKG5ldyBFcnJvcignY3VzdG9tX2luZGV4ZXMgbXVzdCBiZSBhbiBhcnJheSB3aXRoIG9iamVjdHMgd2l0aCBwcm9wZXIgaW5kZXhpbmcgYXR0cmlidXRlcycpKTtcbiAgICAgIH1cbiAgICAgIG1vZGVsU2NoZW1hLmN1c3RvbV9pbmRleGVzLmZvckVhY2goKGN1c3RvbUluZGV4KSA9PiB7XG4gICAgICAgIHRoaXMudmFsaWRhdGVfY3VzdG9tX2luZGV4KG1vZGVsU2NoZW1hLCBjdXN0b21JbmRleCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH0sXG5cbiAgZm9ybWF0X3ZhbGlkYXRpb25fcnVsZShydWxlLCBmaWVsZG5hbWUpIHtcbiAgICBpZiAoIV8uaXNQbGFpbk9iamVjdChydWxlKSkge1xuICAgICAgdGhyb3cgKG5ldyBFcnJvcih1dGlsLmZvcm1hdCgnVmFsaWRhdGlvbiBydWxlIGZvciBcIiVzXCIgbXVzdCBiZSBhIGZ1bmN0aW9uIG9yIGFuIG9iamVjdCcsIGZpZWxkbmFtZSkpKTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBydWxlLnZhbGlkYXRvciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgKG5ldyBFcnJvcih1dGlsLmZvcm1hdCgnUnVsZSB2YWxpZGF0b3IgZm9yIFwiJXNcIiBtdXN0IGJlIGEgdmFsaWQgZnVuY3Rpb24nLCBmaWVsZG5hbWUpKSk7XG4gICAgfVxuICAgIGlmICghcnVsZS5tZXNzYWdlKSB7XG4gICAgICBydWxlLm1lc3NhZ2UgPSB0aGlzLmdldF9nZW5lcmljX3ZhbGlkYXRpb25fbWVzc2FnZTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBydWxlLm1lc3NhZ2UgPT09ICdzdHJpbmcnKSB7XG4gICAgICBydWxlLm1lc3NhZ2UgPSBmdW5jdGlvbiBmMShtZXNzYWdlKSB7XG4gICAgICAgIHJldHVybiB1dGlsLmZvcm1hdChtZXNzYWdlKTtcbiAgICAgIH0uYmluZChudWxsLCBydWxlLm1lc3NhZ2UpO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHJ1bGUubWVzc2FnZSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgKG5ldyBFcnJvcih1dGlsLmZvcm1hdCgnSW52YWxpZCB2YWxpZGF0b3IgbWVzc2FnZSBmb3IgXCIlc1wiLCBtdXN0IGJlIHN0cmluZyBvciBhIGZ1bmN0aW9uJywgZmllbGRuYW1lKSkpO1xuICAgIH1cbiAgICByZXR1cm4gcnVsZTtcbiAgfSxcblxuICBnZXRfZ2VuZXJpY192YWxpZGF0aW9uX21lc3NhZ2UodmFsdWUsIHByb3BOYW1lLCBmaWVsZHR5cGUpIHtcbiAgICByZXR1cm4gdXRpbC5mb3JtYXQoJ0ludmFsaWQgVmFsdWU6IFwiJXNcIiBmb3IgRmllbGQ6ICVzIChUeXBlOiAlcyknLCB2YWx1ZSwgcHJvcE5hbWUsIGZpZWxkdHlwZSk7XG4gIH0sXG5cbiAgZ2V0X3ZhbGlkYXRpb25fbWVzc2FnZSh2YWxpZGF0b3JzLCB2YWx1ZSkge1xuICAgIGlmICh2YWx1ZSA9PSBudWxsIHx8IChfLmlzUGxhaW5PYmplY3QodmFsdWUpICYmIHZhbHVlLiRkYl9mdW5jdGlvbikpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGZvciAobGV0IHYgPSAwOyB2IDwgdmFsaWRhdG9ycy5sZW5ndGg7IHYrKykge1xuICAgICAgaWYgKHR5cGVvZiB2YWxpZGF0b3JzW3ZdLnZhbGlkYXRvciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBpZiAoIXZhbGlkYXRvcnNbdl0udmFsaWRhdG9yKHZhbHVlKSkge1xuICAgICAgICAgIHJldHVybiB2YWxpZGF0b3JzW3ZdLm1lc3NhZ2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH0sXG5cbiAgZ2V0X3ZhbGlkYXRvcnMobW9kZWxTY2hlbWEsIGZpZWxkbmFtZSkge1xuICAgIGNvbnN0IHZhbGlkYXRvcnMgPSBbXTtcbiAgICBjb25zdCBmaWVsZHR5cGUgPSB0aGlzLmdldF9maWVsZF90eXBlKG1vZGVsU2NoZW1hLCBmaWVsZG5hbWUpO1xuICAgIGNvbnN0IHR5cGVGaWVsZFZhbGlkYXRvciA9IGRhdGF0eXBlcy5nZW5lcmljX3R5cGVfdmFsaWRhdG9yKGZpZWxkdHlwZSk7XG4gICAgY29uc3QgZmllbGQgPSBtb2RlbFNjaGVtYS5maWVsZHNbZmllbGRuYW1lXTtcblxuICAgIGlmICh0eXBlRmllbGRWYWxpZGF0b3IpIHtcbiAgICAgIGlmICghKGZpZWxkLnJ1bGUgJiYgZmllbGQucnVsZS50eXBlX3ZhbGlkYXRpb24gPT09IGZhbHNlKSkge1xuICAgICAgICB2YWxpZGF0b3JzLnB1c2godHlwZUZpZWxkVmFsaWRhdG9yKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGZpZWxkLnJ1bGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBpZiAodHlwZW9mIGZpZWxkLnJ1bGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgZmllbGQucnVsZSA9IHtcbiAgICAgICAgICB2YWxpZGF0b3I6IGZpZWxkLnJ1bGUsXG4gICAgICAgICAgbWVzc2FnZTogdGhpcy5nZXRfZ2VuZXJpY192YWxpZGF0aW9uX21lc3NhZ2UsXG4gICAgICAgIH07XG4gICAgICAgIHZhbGlkYXRvcnMucHVzaChmaWVsZC5ydWxlKTtcbiAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShmaWVsZC5ydWxlLnZhbGlkYXRvcnMpKSB7XG4gICAgICAgIGZpZWxkLnJ1bGUudmFsaWRhdG9ycy5mb3JFYWNoKChmaWVsZHJ1bGUpID0+IHtcbiAgICAgICAgICB2YWxpZGF0b3JzLnB1c2godGhpcy5mb3JtYXRfdmFsaWRhdGlvbl9ydWxlKGZpZWxkcnVsZSwgZmllbGRuYW1lKSk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIGlmIChmaWVsZC5ydWxlLnZhbGlkYXRvcikge1xuICAgICAgICB2YWxpZGF0b3JzLnB1c2godGhpcy5mb3JtYXRfdmFsaWRhdGlvbl9ydWxlKGZpZWxkLnJ1bGUsIGZpZWxkbmFtZSkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB2YWxpZGF0b3JzO1xuICB9LFxuXG4gIGdldF9maWVsZF90eXBlKG1vZGVsU2NoZW1hLCBmaWVsZE5hbWUpIHtcbiAgICBjb25zdCBmaWVsZE9iamVjdCA9IG1vZGVsU2NoZW1hLmZpZWxkc1tmaWVsZE5hbWVdO1xuXG4gICAgaWYgKHR5cGVvZiBmaWVsZE9iamVjdCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiBmaWVsZE9iamVjdDtcbiAgICB9XG4gICAgaWYgKF8uaXNQbGFpbk9iamVjdChmaWVsZE9iamVjdCkpIHtcbiAgICAgIHJldHVybiBmaWVsZE9iamVjdC50eXBlO1xuICAgIH1cbiAgICB0aHJvdyAobmV3IEVycm9yKGBUeXBlIG9mIGZpZWxkIFwiJHtmaWVsZE5hbWV9XCIgbm90IGRlZmluZWQgcHJvcGVybHlgKSk7XG4gIH0sXG5cbiAgaXNfcmVxdWlyZWRfZmllbGQobW9kZWxTY2hlbWEsIGZpZWxkTmFtZSkge1xuICAgIGlmIChtb2RlbFNjaGVtYS5maWVsZHNbZmllbGROYW1lXS5ydWxlICYmIG1vZGVsU2NoZW1hLmZpZWxkc1tmaWVsZE5hbWVdLnJ1bGUucmVxdWlyZWQpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG5cbiAgaXNfcHJpbWFyeV9rZXlfZmllbGQobW9kZWxTY2hlbWEsIGZpZWxkTmFtZSkge1xuICAgIGlmIChtb2RlbFNjaGVtYS5rZXkuaW5jbHVkZXMoZmllbGROYW1lKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlmIChtb2RlbFNjaGVtYS5rZXlbMF0gaW5zdGFuY2VvZiBBcnJheSAmJiBtb2RlbFNjaGVtYS5rZXlbMF0uaW5jbHVkZXMoZmllbGROYW1lKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcblxuICBpc19maWVsZF9kZWZhdWx0X3ZhbHVlX3ZhbGlkKG1vZGVsU2NoZW1hLCBmaWVsZE5hbWUpIHtcbiAgICBpZiAoXy5pc1BsYWluT2JqZWN0KG1vZGVsU2NoZW1hLmZpZWxkc1tmaWVsZE5hbWVdKSAmJiBtb2RlbFNjaGVtYS5maWVsZHNbZmllbGROYW1lXS5kZWZhdWx0KSB7XG4gICAgICBpZiAoXy5pc1BsYWluT2JqZWN0KG1vZGVsU2NoZW1hLmZpZWxkc1tmaWVsZE5hbWVdLmRlZmF1bHQpXG4gICAgICAgICAgJiYgIShtb2RlbFNjaGVtYS5maWVsZHNbZmllbGROYW1lXS5kZWZhdWx0LiRkYl9mdW5jdGlvbikpIHtcbiAgICAgICAgcmV0dXJuIFsnbWFwJywgJ2xpc3QnLCAnc2V0JywgJ2Zyb3plbiddLmluY2x1ZGVzKG1vZGVsU2NoZW1hLmZpZWxkc1tmaWVsZE5hbWVdLnR5cGUpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9LFxuXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHNjaGVtZXI7XG4iXX0=
{
"name": "express-cassandra",
"version": "2.8.0",
"version": "2.9.0",
"dependencies": {
"JSONStream": "^1.3.1",
"async": "^1.5.2",
"async": "^2.6.4",
"babel-polyfill": "^6.26.0",

@@ -14,2 +13,3 @@ "bluebird": "^3.4.6",

"deep-diff": "^0.3.4",
"JSONStream": "^1.3.1",
"lodash": "^4.17.15",

@@ -29,19 +29,16 @@ "object-hash": "1.1.4",

"cross-env": "^5.0.5",
"echo-cli": "^1.0.8",
"elasticsearch": "^13.3.1",
"eslint": "^4.9.0",
"eslint-config-airbnb-base": "^12.1.0",
"echo-cli": "^2.0.0",
"eslint": "^8.26.0",
"eslint-config-airbnb-base": "^15.0.0",
"eslint-plugin-import": "^2.8.0",
"gremlin": "^2.6.0",
"istanbul": "^0.4.5",
"mocha": "^5.2.0",
"mocha-logger": "1.0.5",
"mocha": "^10.1.0",
"mocha-logger": "1.0.8",
"mocha-silent-reporter": "^1.0.0",
"nyc": "^11.2.1",
"nyc": "^15.1.0",
"vows": "^0.8.3"
},
"optionalDependencies": {},
"author": {
"name": "Mahafuzur Rahman",
"url": "https://www.codinglogs.com"
"url": "http://express-cassandra.readthedocs.io"
},

@@ -58,3 +55,3 @@ "scripts": {

"license": "LGPL-3.0",
"description": "Cassandra Object Models (ORM/ODM/OGM) for NodeJS with Elassandra & JanusGraph Support",
"description": "Cassandra Object Models (ORM/ODM/OGM) for NodeJS with support for Apache Cassandra, ScyllaDB, Datastax Enterprise, Elassandra & JanusGraph.",
"repository": {

@@ -73,2 +70,4 @@ "type": "git",

"apache-cassandra",
"scylla",
"scylladb",
"datastax",

@@ -95,4 +94,4 @@ "dse",

"engines": {
"node": ">= 4"
"node": ">= 12"
}
}

@@ -10,8 +10,6 @@ [![Build Status](https://app.travis-ci.com/masumsoft/express-cassandra.svg?branch=master)](https://app.travis-ci.com/masumsoft/express-cassandra)

Express-Cassandra is a Cassandra ORM/ODM/OGM for NodeJS with Elassandra & JanusGraph Support.
Express-Cassandra is a Cassandra ORM/ODM/OGM for NodeJS with support for Apache Cassandra, ScyllaDB, Datastax Enterprise, Elassandra & JanusGraph.
No more hassling with raw cql queries from your nodejs web frameworks. Express-Cassandra automatically loads your models and provides you with object oriented mapping to your cassandra tables like a standard ORM/ODM. Built in support for [Elassandra](http://www.elassandra.io/) and [JanusGraph](http://janusgraph.org/) allows you to automatically manage synced elasticsearch and janusgraph indexes stored in cassandra.
No more hassling with raw cql queries from your nodejs web frameworks. Express-Cassandra automatically loads your models and provides you with object oriented mapping to your cassandra/scylladb tables like a standard ORM/ODM. Built in support for [Cassandra](https://cassandra.apache.org/), [ScyllaDB](https://www.scylladb.com/), [Elassandra](http://www.elassandra.io/) and [JanusGraph](http://janusgraph.org/) allows you to automatically manage schema, graph and data models from your javascript codebase. Models are written as javascript modules and they automatically create the underlying db tables, indexes, materialized views, graphs etc. Afterwards you can save, update, delete and query your data using supported model methods. It's decoupled nature allows you to use it with many popular node frameworks without much hassle.
Express-cassandra enables your nodejs app to manage a highly available distributed data store capable of handling large dataset with powerful query features powered by cassandra, elasticsearch and janusgraph combined. Express-cassandra empowers you to manage and query this truely distributed datastore with search, analytics and graph computing functionality from nodejs like you are just dealing with javascript objects and methods. Models are written as javascript modules and they automatically create the underlying db tables, indexes, materialized views, graphs etc. Afterwards you can save, update, delete and query your data using supported model methods. It's decoupled nature allows you to use it with many popular node frameworks without much hassle.
If you are using elassandra, then saved data in cassandra automatically syncs with elasticsearch indexes defined in your schema. You can then do any query [elasticsearch](https://www.elastic.co/products/elasticsearch) indexes support.

@@ -22,12 +20,20 @@

## Our Sponsors: ##
<table><tr>
<td align="center" width="300" ><a href="https://astra.dev/3shh4EF"><img src="https://www.datastax.com/sites/default/files/2021-07/astra-negative-square.png" width="90" height="90" alt="Astra DB" /><br />Astra DB</a><br/>Use Node/Express with DataStax Astra DB - built on Apache Cassandra.</td>
</tr></table>
<table>
<tr>
<td align="center" width="300" >
<a href="https://astra.dev/3shh4EF">
<img src="https://www.datastax.com/sites/default/files/2021-07/astra-negative-square.png" width="90" height="90" alt="Astra DB" />
<br/>Astra DB
</a>
<br/>Use Node/Express with DataStax Astra DB - built on Apache Cassandra.
</td>
</tr>
</table>
## Supported Features
* supports the latest cassandra 4.x and older stable 3.x releases
* supports the latest cassandra 4.x, 3.x and scylladb 5.x versions
* compatible with datastax enterprise solr search and dse graph
* support for elassandra index management and search queries
* support for janusgraph graph management and tinkerpop3 gremlin queries
* compatible with datastax enterprise solr search and dse graph
* full featured CRUD operations and data type validations

@@ -44,3 +50,3 @@ * full support for collections and other advanced data types

* optional support for query debug and progress logs
* most of the bleeding edge cassandra features are supported
* most of the bleeding edge cassandra and scylladb features are supported

@@ -51,3 +57,3 @@ This module internally uses [cassandra-driver](https://github.com/datastax/nodejs-driver).

For apache cassandra version 4.x, 3.x or datastax enterprise
For apache cassandra 4.x, 3.x, scylladb 5.x or datastax enterprise 6.x, 5.x

@@ -68,3 +74,3 @@ npm install express-cassandra

Please note that if you use the legacy cassandra 2.x compliant version then please use the corresponding README.md file for that version. The following documentation is for version 4.x, 3.x and datastax enterprise 6.x/5.x only. The materialized view support and several other part of the documentation is strictly applicable for cassandra 4.x/3.x or dse 6.x/5.x and will not work in earlier versions of cassandra.
Please note that if you use the legacy cassandra 2.x compliant version then please use the corresponding README.md file for that version. The following documentation is for version 4.x, 3.x and datastax enterprise 6.x/5.x only. The materialized view support and several other part of the documentation is strictly applicable for cassandra 4.x/3.x or scylladb 5.x or dse 6.x/5.x and will not work in earlier versions of cassandra.

@@ -77,7 +83,7 @@ # Documentation

A detailed changelog for released versions are available in the [changelog](./CHANGELOG.md) section.
A detailed changelog for released versions is available in the [changelog](./CHANGELOG.md) section.
# Contributing
All contributions, bug reports, bug fixes, documentation improvements, enhancements and ideas are welcome.
All kinds of contributions, bug reports, bug fixes, documentation improvements, enhancements and ideas are welcome.

@@ -92,2 +98,4 @@ A detailed overview on how to contribute can be found in the [contributing guide](./CONTRIBUTING.md).

* ScyllaDB, and ScyllaDB Cloud, are registered trademarks of ScyllaDB, Inc.
* DataStax, Titan, and TitanDB are registered trademark of DataStax, Inc. and its subsidiaries in the United States and/or other countries.

@@ -94,0 +102,0 @@

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc