New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

@eppo/js-client-sdk-common

Package Overview
Dependencies
Maintainers
5
Versions
86
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@eppo/js-client-sdk-common - npm Package Compare versions

Comparing version 1.0.2 to 1.0.3

2

dist/eppo-sdk.js
/*! For license information please see eppo-sdk.js.LICENSE.txt */
var eppo;(()=>{var t={487:t=>{var e={utf8:{stringToBytes:function(t){return e.bin.stringToBytes(unescape(encodeURIComponent(t)))},bytesToString:function(t){return decodeURIComponent(escape(e.bin.bytesToString(t)))}},bin:{stringToBytes:function(t){for(var e=[],r=0;r<t.length;r++)e.push(255&t.charCodeAt(r));return e},bytesToString:function(t){for(var e=[],r=0;r<t.length;r++)e.push(String.fromCharCode(t[r]));return e.join("")}}};t.exports=e},12:t=>{var e,r;e="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",r={rotl:function(t,e){return t<<e|t>>>32-e},rotr:function(t,e){return t<<32-e|t>>>e},endian:function(t){if(t.constructor==Number)return 16711935&r.rotl(t,8)|4278255360&r.rotl(t,24);for(var e=0;e<t.length;e++)t[e]=r.endian(t[e]);return t},randomBytes:function(t){for(var e=[];t>0;t--)e.push(Math.floor(256*Math.random()));return e},bytesToWords:function(t){for(var e=[],r=0,n=0;r<t.length;r++,n+=8)e[n>>>5]|=t[r]<<24-n%32;return e},wordsToBytes:function(t){for(var e=[],r=0;r<32*t.length;r+=8)e.push(t[r>>>5]>>>24-r%32&255);return e},bytesToHex:function(t){for(var e=[],r=0;r<t.length;r++)e.push((t[r]>>>4).toString(16)),e.push((15&t[r]).toString(16));return e.join("")},hexToBytes:function(t){for(var e=[],r=0;r<t.length;r+=2)e.push(parseInt(t.substr(r,2),16));return e},bytesToBase64:function(t){for(var r=[],n=0;n<t.length;n+=3)for(var o=t[n]<<16|t[n+1]<<8|t[n+2],s=0;s<4;s++)8*n+6*s<=8*t.length?r.push(e.charAt(o>>>6*(3-s)&63)):r.push("=");return r.join("")},base64ToBytes:function(t){t=t.replace(/[^A-Z0-9+\/]/gi,"");for(var r=[],n=0,o=0;n<t.length;o=++n%4)0!=o&&r.push((e.indexOf(t.charAt(n-1))&Math.pow(2,-2*o+8)-1)<<2*o|e.indexOf(t.charAt(n))>>>6-2*o);return r}},t.exports=r},738:t=>{function e(t){return!!t.constructor&&"function"==typeof t.constructor.isBuffer&&t.constructor.isBuffer(t)}t.exports=function(t){return null!=t&&(e(t)||function(t){return"function"==typeof t.readFloatLE&&"function"==typeof t.slice&&e(t.slice(0,0))}(t)||!!t._isBuffer)}},568:(t,e,r)=>{var n,o,s,i,u;n=r(12),o=r(487).utf8,s=r(738),i=r(487).bin,(u=function(t,e){t.constructor==String?t=e&&"binary"===e.encoding?i.stringToBytes(t):o.stringToBytes(t):s(t)?t=Array.prototype.slice.call(t,0):Array.isArray(t)||t.constructor===Uint8Array||(t=t.toString());for(var r=n.bytesToWords(t),a=8*t.length,c=1732584193,l=-271733879,f=-1732584194,g=271733878,d=0;d<r.length;d++)r[d]=16711935&(r[d]<<8|r[d]>>>24)|4278255360&(r[d]<<24|r[d]>>>8);r[a>>>5]|=128<<a%32,r[14+(a+64>>>9<<4)]=a;var p=u._ff,h=u._gg,v=u._hh,E=u._ii;for(d=0;d<r.length;d+=16){var _=c,T=l,y=f,S=g;c=p(c,l,f,g,r[d+0],7,-680876936),g=p(g,c,l,f,r[d+1],12,-389564586),f=p(f,g,c,l,r[d+2],17,606105819),l=p(l,f,g,c,r[d+3],22,-1044525330),c=p(c,l,f,g,r[d+4],7,-176418897),g=p(g,c,l,f,r[d+5],12,1200080426),f=p(f,g,c,l,r[d+6],17,-1473231341),l=p(l,f,g,c,r[d+7],22,-45705983),c=p(c,l,f,g,r[d+8],7,1770035416),g=p(g,c,l,f,r[d+9],12,-1958414417),f=p(f,g,c,l,r[d+10],17,-42063),l=p(l,f,g,c,r[d+11],22,-1990404162),c=p(c,l,f,g,r[d+12],7,1804603682),g=p(g,c,l,f,r[d+13],12,-40341101),f=p(f,g,c,l,r[d+14],17,-1502002290),c=h(c,l=p(l,f,g,c,r[d+15],22,1236535329),f,g,r[d+1],5,-165796510),g=h(g,c,l,f,r[d+6],9,-1069501632),f=h(f,g,c,l,r[d+11],14,643717713),l=h(l,f,g,c,r[d+0],20,-373897302),c=h(c,l,f,g,r[d+5],5,-701558691),g=h(g,c,l,f,r[d+10],9,38016083),f=h(f,g,c,l,r[d+15],14,-660478335),l=h(l,f,g,c,r[d+4],20,-405537848),c=h(c,l,f,g,r[d+9],5,568446438),g=h(g,c,l,f,r[d+14],9,-1019803690),f=h(f,g,c,l,r[d+3],14,-187363961),l=h(l,f,g,c,r[d+8],20,1163531501),c=h(c,l,f,g,r[d+13],5,-1444681467),g=h(g,c,l,f,r[d+2],9,-51403784),f=h(f,g,c,l,r[d+7],14,1735328473),c=v(c,l=h(l,f,g,c,r[d+12],20,-1926607734),f,g,r[d+5],4,-378558),g=v(g,c,l,f,r[d+8],11,-2022574463),f=v(f,g,c,l,r[d+11],16,1839030562),l=v(l,f,g,c,r[d+14],23,-35309556),c=v(c,l,f,g,r[d+1],4,-1530992060),g=v(g,c,l,f,r[d+4],11,1272893353),f=v(f,g,c,l,r[d+7],16,-155497632),l=v(l,f,g,c,r[d+10],23,-1094730640),c=v(c,l,f,g,r[d+13],4,681279174),g=v(g,c,l,f,r[d+0],11,-358537222),f=v(f,g,c,l,r[d+3],16,-722521979),l=v(l,f,g,c,r[d+6],23,76029189),c=v(c,l,f,g,r[d+9],4,-640364487),g=v(g,c,l,f,r[d+12],11,-421815835),f=v(f,g,c,l,r[d+15],16,530742520),c=E(c,l=v(l,f,g,c,r[d+2],23,-995338651),f,g,r[d+0],6,-198630844),g=E(g,c,l,f,r[d+7],10,1126891415),f=E(f,g,c,l,r[d+14],15,-1416354905),l=E(l,f,g,c,r[d+5],21,-57434055),c=E(c,l,f,g,r[d+12],6,1700485571),g=E(g,c,l,f,r[d+3],10,-1894986606),f=E(f,g,c,l,r[d+10],15,-1051523),l=E(l,f,g,c,r[d+1],21,-2054922799),c=E(c,l,f,g,r[d+8],6,1873313359),g=E(g,c,l,f,r[d+15],10,-30611744),f=E(f,g,c,l,r[d+6],15,-1560198380),l=E(l,f,g,c,r[d+13],21,1309151649),c=E(c,l,f,g,r[d+4],6,-145523070),g=E(g,c,l,f,r[d+11],10,-1120210379),f=E(f,g,c,l,r[d+2],15,718787259),l=E(l,f,g,c,r[d+9],21,-343485551),c=c+_>>>0,l=l+T>>>0,f=f+y>>>0,g=g+S>>>0}return n.endian([c,l,f,g])})._ff=function(t,e,r,n,o,s,i){var u=t+(e&r|~e&n)+(o>>>0)+i;return(u<<s|u>>>32-s)+e},u._gg=function(t,e,r,n,o,s,i){var u=t+(e&n|r&~n)+(o>>>0)+i;return(u<<s|u>>>32-s)+e},u._hh=function(t,e,r,n,o,s,i){var u=t+(e^r^n)+(o>>>0)+i;return(u<<s|u>>>32-s)+e},u._ii=function(t,e,r,n,o,s,i){var u=t+(r^(e|~n))+(o>>>0)+i;return(u<<s|u>>>32-s)+e},u._blocksize=16,u._digestsize=16,t.exports=function(t,e){if(null==t)throw new Error("Illegal argument "+t);var r=n.wordsToBytes(u(t,e));return e&&e.asBytes?r:e&&e.asString?i.bytesToString(r):n.bytesToHex(r)}},476:(t,e,r)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});const n=r(568),o=r(601),s=r(116),i=r(996),u=r(472);e.default=class{constructor(t){this.configurationStore=t,this.queuedEvents=[],this.assignmentLogger=null}getAssignment(t,e,r={}){(0,u.validateNotBlank)(t,"Invalid argument: subjectKey cannot be blank"),(0,u.validateNotBlank)(e,"Invalid argument: experimentKey cannot be blank");const n=this.configurationStore.get(e),o=this.getSubjectVariationOverride(t,n);if(o)return o;if(!(null==n?void 0:n.enabled))return null;const a=(0,s.findMatchingRule)(r||{},n.rules);if(!a)return null;const c=n.allocations[a.allocationKey];if(!this.isInExperimentSample(t,e,n,c))return null;const{subjectShards:l}=n,{variations:f}=c,g=(0,i.getShard)(`assignment-${t}-${e}`,l),d=f.find((t=>(0,i.isShardInRange)(g,t.shardRange))).value;return this.logAssignment(e,d,t,r),d}setLogger(t){this.assignmentLogger=t,this.flushQueuedEvents()}flushQueuedEvents(){const t=this.queuedEvents;this.queuedEvents=[];try{for(const e of t)this.assignmentLogger.logAssignment(e)}catch(t){console.error(`[Eppo SDK] Error flushing assignment events: ${t.message}`)}}logAssignment(t,e,r,n){const s={experiment:t,variation:e,timestamp:(new Date).toISOString(),subject:r,subjectAttributes:n};if(null!=this.assignmentLogger)try{this.assignmentLogger.logAssignment(s)}catch(t){console.error(`[Eppo SDK] Error logging assignment event: ${t.message}`)}else this.queuedEvents.length<o.MAX_EVENT_QUEUE_SIZE&&this.queuedEvents.push(s)}getSubjectVariationOverride(t,e){const r=n(t);return null==e?void 0:e.overrides[r]}isInExperimentSample(t,e,r,n){const{subjectShards:o}=r,{percentExposure:s}=n;return(0,i.getShard)(`exposure-${t}-${e}`,o)<=s*o}}},601:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.MAX_EVENT_QUEUE_SIZE=e.NULL_SENTINEL=e.SESSION_ASSIGNMENT_CONFIG_LOADED=e.BASE_URL=e.REQUEST_TIMEOUT_MILLIS=void 0,e.REQUEST_TIMEOUT_MILLIS=5e3,e.BASE_URL="https://eppo.cloud/api",e.SESSION_ASSIGNMENT_CONFIG_LOADED="eppo-session-assignment-config-loaded",e.NULL_SENTINEL="EPPO_NULL",e.MAX_EVENT_QUEUE_SIZE=100},727:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.OperatorType=void 0,function(t){t.MATCHES="MATCHES",t.GTE="GTE",t.GT="GT",t.LTE="LTE",t.LT="LT",t.ONE_OF="ONE_OF",t.NOT_ONE_OF="NOT_ONE_OF"}(e.OperatorType||(e.OperatorType={}))},238:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});e.default=class{constructor(t,e){this.configurationStore=t,this.httpClient=e}async fetchAndStoreConfigurations(){const t=await this.httpClient.get("/randomized_assignment/v2/config");return this.configurationStore.setEntries(t.flags),t.flags}}},75:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.HttpRequestError=void 0;class r extends Error{constructor(t,e){super(t),this.message=t,this.status=e}}e.HttpRequestError=r;e.default=class{constructor(t,e){this.axiosInstance=t,this.sdkParams=e}async get(t){try{return(await this.axiosInstance.get(t,{params:this.sdkParams})).data}catch(t){this.handleHttpError(t)}}handleHttpError(t){var e;const n=null===(e=null==t?void 0:t.response)||void 0===e?void 0:e.status;throw new r(t.message,n)}}},116:(t,e,r)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.findMatchingRule=void 0;const n=r(727);function o(t,e){const r=function(t,e){return e.map((e=>function(t,e){const r=t[e.attribute];if(null!=r)switch(e.operator){case n.OperatorType.GTE:return i(r,e.value,((t,e)=>t>=e));case n.OperatorType.GT:return i(r,e.value,((t,e)=>t>e));case n.OperatorType.LTE:return i(r,e.value,((t,e)=>t<=e));case n.OperatorType.LT:return i(r,e.value,((t,e)=>t<e));case n.OperatorType.MATCHES:return new RegExp(e.value).test(r);case n.OperatorType.ONE_OF:return o=r,u=e.value,s(o.toString(),u).length>0;case n.OperatorType.NOT_ONE_OF:return function(t,e){return 0===s(t.toString(),e).length}(r,e.value)}var o,u;return!1}(t,e)))}(t,e.conditions);return!r.includes(!1)}function s(t,e){return e.filter((e=>e.toLowerCase()===t.toLowerCase()))}function i(t,e,r){return"number"==typeof t&&"number"==typeof e&&r(t,e)}e.findMatchingRule=function(t,e){for(const r of e)if(o(t,r))return r;return null}},996:(t,e,r)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.isShardInRange=e.getShard=void 0;const n=r(568);e.getShard=function(t,e){const r=n(t);return parseInt(r.slice(0,8),16)%e},e.isShardInRange=function(t,e){return t>=e.start&&t<e.end}},472:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.validateNotBlank=e.InvalidArgumentError=void 0;class r extends Error{}e.InvalidArgumentError=r,e.validateNotBlank=function(t,e){if(null==t||0===t.length)throw new r(e)}}},e={};function r(n){var o=e[n];if(void 0!==o)return o.exports;var s=e[n]={exports:{}};return t[n](s,s.exports,r),s.exports}var n={};(()=>{"use strict";var t=n;Object.defineProperty(t,"__esModule",{value:!0}),t.validation=t.HttpClient=t.ExperimentConfigurationRequestor=t.constants=t.EppoClient=void 0;const e=r(476);t.EppoClient=e.default;const o=r(601);t.constants=o;const s=r(238);t.ExperimentConfigurationRequestor=s.default;const i=r(75);t.HttpClient=i.default;const u=r(472);t.validation=u})(),eppo=n})();
//# sourceMappingURL=data:application/json;charset=utf-8;base64,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SixFQUFXdkksTUFBTSxFQUFHLEdBQUksSUFDaEMwRCxDQUN2QixFQUVBLDBCQUErQkUsRUFBZTRFLEdBQzVDLE9BQU81RSxHQUFTNEUsRUFBTUMsT0FBUzdFLEVBQVE0RSxFQUFNRSxHQUMvQyw4SENkQSxNQUFhQyxVQUE2QjFHLE9BQTFDLHlCQUVBLDRCQUFpQ2tDLEVBQWV5RSxHQUM5QyxHQUFhLE1BQVR6RSxHQUFrQyxJQUFqQkEsRUFBTS9HLE9BQ3pCLE1BQU0sSUFBSXVMLEVBQXFCQyxFQUVuQyxJQ0xJQyxFQUEyQixDQUFDLEVBR2hDLFNBQVNDLEVBQW9CQyxHQUU1QixJQUFJQyxFQUFlSCxFQUF5QkUsR0FDNUMsUUFBcUJFLElBQWpCRCxFQUNILE9BQU9BLEVBQWFyTCxRQUdyQixJQUFJRCxFQUFTbUwsRUFBeUJFLEdBQVksQ0FHakRwTCxRQUFTLENBQUMsR0FPWCxPQUhBdUwsRUFBb0JILEdBQVVyTCxFQUFRQSxFQUFPQyxRQUFTbUwsR0FHL0NwTCxFQUFPQyxPQUNmLG1MQ3JCQSxlQVFFLEVBQUF3TCxXQVJLLFVBQ1AsZUFTRSxFQUFBQyxVQUFBQSxFQVJGLGVBU0UsRUFBQUMsaUNBVEssVUFDUCxjQVNFLEVBQUFDLFdBVEssVUFDUCxlQVNFLEVBQUFDLFdBQUFBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZXBwby8uL25vZGVfbW9kdWxlcy9jaGFyZW5jL2NoYXJlbmMuanMiLCJ3ZWJwYWNrOi8vZXBwby8uL25vZGVfbW9kdWxlcy9jcnlwdC9jcnlwdC5qcyIsIndlYnBhY2s6Ly9lcHBvLy4vbm9kZV9tb2R1bGVzL2lzLWJ1ZmZlci9pbmRleC5qcyIsIndlYnBhY2s6Ly9lcHBvLy4vbm9kZV9tb2R1bGVzL21kNS9tZDUuanMiLCJ3ZWJwYWNrOi8vZXBwby8uL3NyYy9jbGllbnQvZXBwby1jbGllbnQudHMiLCJ3ZWJwYWNrOi8vZXBwby8uL3NyYy9jb25zdGFudHMudHMiLCJ3ZWJwYWNrOi8vZXBwby8uL3NyYy9kdG8vcnVsZS1kdG8udHMiLCJ3ZWJwYWNrOi8vZXBwby8uL3NyYy9leHBlcmltZW50LWNvbmZpZ3VyYXRpb24tcmVxdWVzdG9yLnRzIiwid2VicGFjazovL2VwcG8vLi9zcmMvaHR0cC1jbGllbnQudHMiLCJ3ZWJwYWNrOi8vZXBwby8uL3NyYy9ydWxlX2V2YWx1YXRvci50cyIsIndlYnBhY2s6Ly9lcHBvLy4vc3JjL3NoYXJkLnRzIiwid2VicGFjazovL2VwcG8vLi9zcmMvdmFsaWRhdGlvbi50cyIsIndlYnBhY2s6Ly9lcHBvL3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovL2VwcG8vLi9zcmMvaW5kZXgudHMiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIGNoYXJlbmMgPSB7XG4gIC8vIFVURi04IGVuY29kaW5nXG4gIHV0Zjg6IHtcbiAgICAvLyBDb252ZXJ0IGEgc3RyaW5nIHRvIGEgYnl0ZSBhcnJheVxuICAgIHN0cmluZ1RvQnl0ZXM6IGZ1bmN0aW9uKHN0cikge1xuICAgICAgcmV0dXJuIGNoYXJlbmMuYmluLnN0cmluZ1RvQnl0ZXModW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KHN0cikpKTtcbiAgICB9LFxuXG4gICAgLy8gQ29udmVydCBhIGJ5dGUgYXJyYXkgdG8gYSBzdHJpbmdcbiAgICBieXRlc1RvU3RyaW5nOiBmdW5jdGlvbihieXRlcykge1xuICAgICAgcmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChlc2NhcGUoY2hhcmVuYy5iaW4uYnl0ZXNUb1N0cmluZyhieXRlcykpKTtcbiAgICB9XG4gIH0sXG5cbiAgLy8gQmluYXJ5IGVuY29kaW5nXG4gIGJpbjoge1xuICAgIC8vIENvbnZlcnQgYSBzdHJpbmcgdG8gYSBieXRlIGFycmF5XG4gICAgc3RyaW5nVG9CeXRlczogZnVuY3Rpb24oc3RyKSB7XG4gICAgICBmb3IgKHZhciBieXRlcyA9IFtdLCBpID0gMDsgaSA8IHN0ci5sZW5ndGg7IGkrKylcbiAgICAgICAgYnl0ZXMucHVzaChzdHIuY2hhckNvZGVBdChpKSAmIDB4RkYpO1xuICAgICAgcmV0dXJuIGJ5dGVzO1xuICAgIH0sXG5cbiAgICAvLyBDb252ZXJ0IGEgYnl0ZSBhcnJheSB0byBhIHN0cmluZ1xuICAgIGJ5dGVzVG9TdHJpbmc6IGZ1bmN0aW9uKGJ5dGVzKSB7XG4gICAgICBmb3IgKHZhciBzdHIgPSBbXSwgaSA9IDA7IGkgPCBieXRlcy5sZW5ndGg7IGkrKylcbiAgICAgICAgc3RyLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZShieXRlc1tpXSkpO1xuICAgICAgcmV0dXJuIHN0ci5qb2luKCcnKTtcbiAgICB9XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gY2hhcmVuYztcbiIsIihmdW5jdGlvbigpIHtcbiAgdmFyIGJhc2U2NG1hcFxuICAgICAgPSAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLycsXG5cbiAgY3J5cHQgPSB7XG4gICAgLy8gQml0LXdpc2Ugcm90YXRpb24gbGVmdFxuICAgIHJvdGw6IGZ1bmN0aW9uKG4sIGIpIHtcbiAgICAgIHJldHVybiAobiA8PCBiKSB8IChuID4+PiAoMzIgLSBiKSk7XG4gICAgfSxcblxuICAgIC8vIEJpdC13aXNlIHJvdGF0aW9uIHJpZ2h0XG4gICAgcm90cjogZnVuY3Rpb24obiwgYikge1xuICAgICAgcmV0dXJuIChuIDw8ICgzMiAtIGIpKSB8IChuID4+PiBiKTtcbiAgICB9LFxuXG4gICAgLy8gU3dhcCBiaWctZW5kaWFuIHRvIGxpdHRsZS1lbmRpYW4gYW5kIHZpY2UgdmVyc2FcbiAgICBlbmRpYW46IGZ1bmN0aW9uKG4pIHtcbiAgICAgIC8vIElmIG51bWJlciBnaXZlbiwgc3dhcCBlbmRpYW5cbiAgICAgIGlmIChuLmNvbnN0cnVjdG9yID09IE51bWJlcikge1xuICAgICAgICByZXR1cm4gY3J5cHQucm90bChuLCA4KSAmIDB4MDBGRjAwRkYgfCBjcnlwdC5yb3RsKG4sIDI0KSAmIDB4RkYwMEZGMDA7XG4gICAgICB9XG5cbiAgICAgIC8vIEVsc2UsIGFzc3VtZSBhcnJheSBhbmQgc3dhcCBhbGwgaXRlbXNcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbi5sZW5ndGg7IGkrKylcbiAgICAgICAgbltpXSA9IGNyeXB0LmVuZGlhbihuW2ldKTtcbiAgICAgIHJldHVybiBuO1xuICAgIH0sXG5cbiAgICAvLyBHZW5lcmF0ZSBhbiBhcnJheSBvZiBhbnkgbGVuZ3RoIG9mIHJhbmRvbSBieXRlc1xuICAgIHJhbmRvbUJ5dGVzOiBmdW5jdGlvbihuKSB7XG4gICAgICBmb3IgKHZhciBieXRlcyA9IFtdOyBuID4gMDsgbi0tKVxuICAgICAgICBieXRlcy5wdXNoKE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDI1NikpO1xuICAgICAgcmV0dXJuIGJ5dGVzO1xuICAgIH0sXG5cbiAgICAvLyBDb252ZXJ0IGEgYnl0ZSBhcnJheSB0byBiaWctZW5kaWFuIDMyLWJpdCB3b3Jkc1xuICAgIGJ5dGVzVG9Xb3JkczogZnVuY3Rpb24oYnl0ZXMpIHtcbiAgICAgIGZvciAodmFyIHdvcmRzID0gW10sIGkgPSAwLCBiID0gMDsgaSA8IGJ5dGVzLmxlbmd0aDsgaSsrLCBiICs9IDgpXG4gICAgICAgIHdvcmRzW2IgPj4+IDVdIHw9IGJ5dGVzW2ldIDw8ICgyNCAtIGIgJSAzMik7XG4gICAgICByZXR1cm4gd29yZHM7XG4gICAgfSxcblxuICAgIC8vIENvbnZlcnQgYmlnLWVuZGlhbiAzMi1iaXQgd29yZHMgdG8gYSBieXRlIGFycmF5XG4gICAgd29yZHNUb0J5dGVzOiBmdW5jdGlvbih3b3Jkcykge1xuICAgICAgZm9yICh2YXIgYnl0ZXMgPSBbXSwgYiA9IDA7IGIgPCB3b3Jkcy5sZW5ndGggKiAzMjsgYiArPSA4KVxuICAgICAgICBieXRlcy5wdXNoKCh3b3Jkc1tiID4+PiA1XSA+Pj4gKDI0IC0gYiAlIDMyKSkgJiAweEZGKTtcbiAgICAgIHJldHVybiBieXRlcztcbiAgICB9LFxuXG4gICAgLy8gQ29udmVydCBhIGJ5dGUgYXJyYXkgdG8gYSBoZXggc3RyaW5nXG4gICAgYnl0ZXNUb0hleDogZnVuY3Rpb24oYnl0ZXMpIHtcbiAgICAgIGZvciAodmFyIGhleCA9IFtdLCBpID0gMDsgaSA8IGJ5dGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGhleC5wdXNoKChieXRlc1tpXSA+Pj4gNCkudG9TdHJpbmcoMTYpKTtcbiAgICAgICAgaGV4LnB1c2goKGJ5dGVzW2ldICYgMHhGKS50b1N0cmluZygxNikpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGhleC5qb2luKCcnKTtcbiAgICB9LFxuXG4gICAgLy8gQ29udmVydCBhIGhleCBzdHJpbmcgdG8gYSBieXRlIGFycmF5XG4gICAgaGV4VG9CeXRlczogZnVuY3Rpb24oaGV4KSB7XG4gICAgICBmb3IgKHZhciBieXRlcyA9IFtdLCBjID0gMDsgYyA8IGhleC5sZW5ndGg7IGMgKz0gMilcbiAgICAgICAgYnl0ZXMucHVzaChwYXJzZUludChoZXguc3Vic3RyKGMsIDIpLCAxNikpO1xuICAgICAgcmV0dXJuIGJ5dGVzO1xuICAgIH0sXG5cbiAgICAvLyBDb252ZXJ0IGEgYnl0ZSBhcnJheSB0byBhIGJhc2UtNjQgc3RyaW5nXG4gICAgYnl0ZXNUb0Jhc2U2NDogZnVuY3Rpb24oYnl0ZXMpIHtcbiAgICAgIGZvciAodmFyIGJhc2U2NCA9IFtdLCBpID0gMDsgaSA8IGJ5dGVzLmxlbmd0aDsgaSArPSAzKSB7XG4gICAgICAgIHZhciB0cmlwbGV0ID0gKGJ5dGVzW2ldIDw8IDE2KSB8IChieXRlc1tpICsgMV0gPDwgOCkgfCBieXRlc1tpICsgMl07XG4gICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgNDsgaisrKVxuICAgICAgICAgIGlmIChpICogOCArIGogKiA2IDw9IGJ5dGVzLmxlbmd0aCAqIDgpXG4gICAgICAgICAgICBiYXNlNjQucHVzaChiYXNlNjRtYXAuY2hhckF0KCh0cmlwbGV0ID4+PiA2ICogKDMgLSBqKSkgJiAweDNGKSk7XG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgYmFzZTY0LnB1c2goJz0nKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBiYXNlNjQuam9pbignJyk7XG4gICAgfSxcblxuICAgIC8vIENvbnZlcnQgYSBiYXNlLTY0IHN0cmluZyB0byBhIGJ5dGUgYXJyYXlcbiAgICBiYXNlNjRUb0J5dGVzOiBmdW5jdGlvbihiYXNlNjQpIHtcbiAgICAgIC8vIFJlbW92ZSBub24tYmFzZS02NCBjaGFyYWN0ZXJzXG4gICAgICBiYXNlNjQgPSBiYXNlNjQucmVwbGFjZSgvW15BLVowLTkrXFwvXS9pZywgJycpO1xuXG4gICAgICBmb3IgKHZhciBieXRlcyA9IFtdLCBpID0gMCwgaW1vZDQgPSAwOyBpIDwgYmFzZTY0Lmxlbmd0aDtcbiAgICAgICAgICBpbW9kNCA9ICsraSAlIDQpIHtcbiAgICAgICAgaWYgKGltb2Q0ID09IDApIGNvbnRpbnVlO1xuICAgICAgICBieXRlcy5wdXNoKCgoYmFzZTY0bWFwLmluZGV4T2YoYmFzZTY0LmNoYXJBdChpIC0gMSkpXG4gICAgICAgICAgICAmIChNYXRoLnBvdygyLCAtMiAqIGltb2Q0ICsgOCkgLSAxKSkgPDwgKGltb2Q0ICogMikpXG4gICAgICAgICAgICB8IChiYXNlNjRtYXAuaW5kZXhPZihiYXNlNjQuY2hhckF0KGkpKSA+Pj4gKDYgLSBpbW9kNCAqIDIpKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gYnl0ZXM7XG4gICAgfVxuICB9O1xuXG4gIG1vZHVsZS5leHBvcnRzID0gY3J5cHQ7XG59KSgpO1xuIiwiLyohXG4gKiBEZXRlcm1pbmUgaWYgYW4gb2JqZWN0IGlzIGEgQnVmZmVyXG4gKlxuICogQGF1dGhvciAgIEZlcm9zcyBBYm91a2hhZGlqZWggPGh0dHBzOi8vZmVyb3NzLm9yZz5cbiAqIEBsaWNlbnNlICBNSVRcbiAqL1xuXG4vLyBUaGUgX2lzQnVmZmVyIGNoZWNrIGlzIGZvciBTYWZhcmkgNS03IHN1cHBvcnQsIGJlY2F1c2UgaXQncyBtaXNzaW5nXG4vLyBPYmplY3QucHJvdG90eXBlLmNvbnN0cnVjdG9yLiBSZW1vdmUgdGhpcyBldmVudHVhbGx5XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmopIHtcbiAgcmV0dXJuIG9iaiAhPSBudWxsICYmIChpc0J1ZmZlcihvYmopIHx8IGlzU2xvd0J1ZmZlcihvYmopIHx8ICEhb2JqLl9pc0J1ZmZlcilcbn1cblxuZnVuY3Rpb24gaXNCdWZmZXIgKG9iaikge1xuICByZXR1cm4gISFvYmouY29uc3RydWN0b3IgJiYgdHlwZW9mIG9iai5jb25zdHJ1Y3Rvci5pc0J1ZmZlciA9PT0gJ2Z1bmN0aW9uJyAmJiBvYmouY29uc3RydWN0b3IuaXNCdWZmZXIob2JqKVxufVxuXG4vLyBGb3IgTm9kZSB2MC4xMCBzdXBwb3J0LiBSZW1vdmUgdGhpcyBldmVudHVhbGx5LlxuZnVuY3Rpb24gaXNTbG93QnVmZmVyIChvYmopIHtcbiAgcmV0dXJuIHR5cGVvZiBvYmoucmVhZEZsb2F0TEUgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIG9iai5zbGljZSA9PT0gJ2Z1bmN0aW9uJyAmJiBpc0J1ZmZlcihvYmouc2xpY2UoMCwgMCkpXG59XG4iLCIoZnVuY3Rpb24oKXtcclxuICB2YXIgY3J5cHQgPSByZXF1aXJlKCdjcnlwdCcpLFxyXG4gICAgICB1dGY4ID0gcmVxdWlyZSgnY2hhcmVuYycpLnV0ZjgsXHJcbiAgICAgIGlzQnVmZmVyID0gcmVxdWlyZSgnaXMtYnVmZmVyJyksXHJcbiAgICAgIGJpbiA9IHJlcXVpcmUoJ2NoYXJlbmMnKS5iaW4sXHJcblxyXG4gIC8vIFRoZSBjb3JlXHJcbiAgbWQ1ID0gZnVuY3Rpb24gKG1lc3NhZ2UsIG9wdGlvbnMpIHtcclxuICAgIC8vIENvbnZlcnQgdG8gYnl0ZSBhcnJheVxyXG4gICAgaWYgKG1lc3NhZ2UuY29uc3RydWN0b3IgPT0gU3RyaW5nKVxyXG4gICAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLmVuY29kaW5nID09PSAnYmluYXJ5JylcclxuICAgICAgICBtZXNzYWdlID0gYmluLnN0cmluZ1RvQnl0ZXMobWVzc2FnZSk7XHJcbiAgICAgIGVsc2VcclxuICAgICAgICBtZXNzYWdlID0gdXRmOC5zdHJpbmdUb0J5dGVzKG1lc3NhZ2UpO1xyXG4gICAgZWxzZSBpZiAoaXNCdWZmZXIobWVzc2FnZSkpXHJcbiAgICAgIG1lc3NhZ2UgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChtZXNzYWdlLCAwKTtcclxuICAgIGVsc2UgaWYgKCFBcnJheS5pc0FycmF5KG1lc3NhZ2UpICYmIG1lc3NhZ2UuY29uc3RydWN0b3IgIT09IFVpbnQ4QXJyYXkpXHJcbiAgICAgIG1lc3NhZ2UgPSBtZXNzYWdlLnRvU3RyaW5nKCk7XHJcbiAgICAvLyBlbHNlLCBhc3N1bWUgYnl0ZSBhcnJheSBhbHJlYWR5XHJcblxyXG4gICAgdmFyIG0gPSBjcnlwdC5ieXRlc1RvV29yZHMobWVzc2FnZSksXHJcbiAgICAgICAgbCA9IG1lc3NhZ2UubGVuZ3RoICogOCxcclxuICAgICAgICBhID0gIDE3MzI1ODQxOTMsXHJcbiAgICAgICAgYiA9IC0yNzE3MzM4NzksXHJcbiAgICAgICAgYyA9IC0xNzMyNTg0MTk0LFxyXG4gICAgICAgIGQgPSAgMjcxNzMzODc4O1xyXG5cclxuICAgIC8vIFN3YXAgZW5kaWFuXHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG0ubGVuZ3RoOyBpKyspIHtcclxuICAgICAgbVtpXSA9ICgobVtpXSA8PCAgOCkgfCAobVtpXSA+Pj4gMjQpKSAmIDB4MDBGRjAwRkYgfFxyXG4gICAgICAgICAgICAgKChtW2ldIDw8IDI0KSB8IChtW2ldID4+PiAgOCkpICYgMHhGRjAwRkYwMDtcclxuICAgIH1cclxuXHJcbiAgICAvLyBQYWRkaW5nXHJcbiAgICBtW2wgPj4+IDVdIHw9IDB4ODAgPDwgKGwgJSAzMik7XHJcbiAgICBtWygoKGwgKyA2NCkgPj4+IDkpIDw8IDQpICsgMTRdID0gbDtcclxuXHJcbiAgICAvLyBNZXRob2Qgc2hvcnRjdXRzXHJcbiAgICB2YXIgRkYgPSBtZDUuX2ZmLFxyXG4gICAgICAgIEdHID0gbWQ1Ll9nZyxcclxuICAgICAgICBISCA9IG1kNS5faGgsXHJcbiAgICAgICAgSUkgPSBtZDUuX2lpO1xyXG5cclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbS5sZW5ndGg7IGkgKz0gMTYpIHtcclxuXHJcbiAgICAgIHZhciBhYSA9IGEsXHJcbiAgICAgICAgICBiYiA9IGIsXHJcbiAgICAgICAgICBjYyA9IGMsXHJcbiAgICAgICAgICBkZCA9IGQ7XHJcblxyXG4gICAgICBhID0gRkYoYSwgYiwgYywgZCwgbVtpKyAwXSwgIDcsIC02ODA4NzY5MzYpO1xyXG4gICAgICBkID0gRkYoZCwgYSwgYiwgYywgbVtpKyAxXSwgMTIsIC0zODk1NjQ1ODYpO1xyXG4gICAgICBjID0gRkYoYywgZCwgYSwgYiwgbVtpKyAyXSwgMTcsICA2MDYxMDU4MTkpO1xyXG4gICAgICBiID0gRkYoYiwgYywgZCwgYSwgbVtpKyAzXSwgMjIsIC0xMDQ0NTI1MzMwKTtcclxuICAgICAgYSA9IEZGKGEsIGIsIGMsIGQsIG1baSsgNF0sICA3LCAtMTc2NDE4ODk3KTtcclxuICAgICAgZCA9IEZGKGQsIGEsIGIsIGMsIG1baSsgNV0sIDEyLCAgMTIwMDA4MDQyNik7XHJcbiAgICAgIGMgPSBGRihjLCBkLCBhLCBiLCBtW2krIDZdLCAxNywgLTE0NzMyMzEzNDEpO1xyXG4gICAgICBiID0gRkYoYiwgYywgZCwgYSwgbVtpKyA3XSwgMjIsIC00NTcwNTk4Myk7XHJcbiAgICAgIGEgPSBGRihhLCBiLCBjLCBkLCBtW2krIDhdLCAgNywgIDE3NzAwMzU0MTYpO1xyXG4gICAgICBkID0gRkYoZCwgYSwgYiwgYywgbVtpKyA5XSwgMTIsIC0xOTU4NDE0NDE3KTtcclxuICAgICAgYyA9IEZGKGMsIGQsIGEsIGIsIG1baSsxMF0sIDE3LCAtNDIwNjMpO1xyXG4gICAgICBiID0gRkYoYiwgYywgZCwgYSwgbVtpKzExXSwgMjIsIC0xOTkwNDA0MTYyKTtcclxuICAgICAgYSA9IEZGKGEsIGIsIGMsIGQsIG1baSsxMl0sICA3LCAgMTgwNDYwMzY4Mik7XHJcbiAgICAgIGQgPSBGRihkLCBhLCBiLCBjLCBtW2krMTNdLCAxMiwgLTQwMzQxMTAxKTtcclxuICAgICAgYyA9IEZGKGMsIGQsIGEsIGIsIG1baSsxNF0sIDE3LCAtMTUwMjAwMjI5MCk7XHJcbiAgICAgIGIgPSBGRihiLCBjLCBkLCBhLCBtW2krMTVdLCAyMiwgIDEyMzY1MzUzMjkpO1xyXG5cclxuICAgICAgYSA9IEdHKGEsIGIsIGMsIGQsIG1baSsgMV0sICA1LCAtMTY1Nzk2NTEwKTtcclxuICAgICAgZCA9IEdHKGQsIGEsIGIsIGMsIG1baSsgNl0sICA5LCAtMTA2OTUwMTYzMik7XHJcbiAgICAgIGMgPSBHRyhjLCBkLCBhLCBiLCBtW2krMTFdLCAxNCwgIDY0MzcxNzcxMyk7XHJcbiAgICAgIGIgPSBHRyhiLCBjLCBkLCBhLCBtW2krIDBdLCAyMCwgLTM3Mzg5NzMwMik7XHJcbiAgICAgIGEgPSBHRyhhLCBiLCBjLCBkLCBtW2krIDVdLCAgNSwgLTcwMTU1ODY5MSk7XHJcbiAgICAgIGQgPSBHRyhkLCBhLCBiLCBjLCBtW2krMTBdLCAgOSwgIDM4MDE2MDgzKTtcclxuICAgICAgYyA9IEdHKGMsIGQsIGEsIGIsIG1baSsxNV0sIDE0LCAtNjYwNDc4MzM1KTtcclxuICAgICAgYiA9IEdHKGIsIGMsIGQsIGEsIG1baSsgNF0sIDIwLCAtNDA1NTM3ODQ4KTtcclxuICAgICAgYSA9IEdHKGEsIGIsIGMsIGQsIG1baSsgOV0sICA1LCAgNTY4NDQ2NDM4KTtcclxuICAgICAgZCA9IEdHKGQsIGEsIGIsIGMsIG1baSsxNF0sICA5LCAtMTAxOTgwMzY5MCk7XHJcbiAgICAgIGMgPSBHRyhjLCBkLCBhLCBiLCBtW2krIDNdLCAxNCwgLTE4NzM2Mzk2MSk7XHJcbiAgICAgIGIgPSBHRyhiLCBjLCBkLCBhLCBtW2krIDhdLCAyMCwgIDExNjM1MzE1MDEpO1xyXG4gICAgICBhID0gR0coYSwgYiwgYywgZCwgbVtpKzEzXSwgIDUsIC0xNDQ0NjgxNDY3KTtcclxuICAgICAgZCA9IEdHKGQsIGEsIGIsIGMsIG1baSsgMl0sICA5LCAtNTE0MDM3ODQpO1xyXG4gICAgICBjID0gR0coYywgZCwgYSwgYiwgbVtpKyA3XSwgMTQsICAxNzM1MzI4NDczKTtcclxuICAgICAgYiA9IEdHKGIsIGMsIGQsIGEsIG1baSsxMl0sIDIwLCAtMTkyNjYwNzczNCk7XHJcblxyXG4gICAgICBhID0gSEgoYSwgYiwgYywgZCwgbVtpKyA1XSwgIDQsIC0zNzg1NTgpO1xyXG4gICAgICBkID0gSEgoZCwgYSwgYiwgYywgbVtpKyA4XSwgMTEsIC0yMDIyNTc0NDYzKTtcclxuICAgICAgYyA9IEhIKGMsIGQsIGEsIGIsIG1baSsxMV0sIDE2LCAgMTgzOTAzMDU2Mik7XHJcbiAgICAgIGIgPSBISChiLCBjLCBkLCBhLCBtW2krMTRdLCAyMywgLTM1MzA5NTU2KTtcclxuICAgICAgYSA9IEhIKGEsIGIsIGMsIGQsIG1baSsgMV0sICA0LCAtMTUzMDk5MjA2MCk7XHJcbiAgICAgIGQgPSBISChkLCBhLCBiLCBjLCBtW2krIDRdLCAxMSwgIDEyNzI4OTMzNTMpO1xyXG4gICAgICBjID0gSEgoYywgZCwgYSwgYiwgbVtpKyA3XSwgMTYsIC0xNTU0OTc2MzIpO1xyXG4gICAgICBiID0gSEgoYiwgYywgZCwgYSwgbVtpKzEwXSwgMjMsIC0xMDk0NzMwNjQwKTtcclxuICAgICAgYSA9IEhIKGEsIGIsIGMsIGQsIG1baSsxM10sICA0LCAgNjgxMjc5MTc0KTtcclxuICAgICAgZCA9IEhIKGQsIGEsIGIsIGMsIG1baSsgMF0sIDExLCAtMzU4NTM3MjIyKTtcclxuICAgICAgYyA9IEhIKGMsIGQsIGEsIGIsIG1baSsgM10sIDE2LCAtNzIyNTIxOTc5KTtcclxuICAgICAgYiA9IEhIKGIsIGMsIGQsIGEsIG1baSsgNl0sIDIzLCAgNzYwMjkxODkpO1xyXG4gICAgICBhID0gSEgoYSwgYiwgYywgZCwgbVtpKyA5XSwgIDQsIC02NDAzNjQ0ODcpO1xyXG4gICAgICBkID0gSEgoZCwgYSwgYiwgYywgbVtpKzEyXSwgMTEsIC00MjE4MTU4MzUpO1xyXG4gICAgICBjID0gSEgoYywgZCwgYSwgYiwgbVtpKzE1XSwgMTYsICA1MzA3NDI1MjApO1xyXG4gICAgICBiID0gSEgoYiwgYywgZCwgYSwgbVtpKyAyXSwgMjMsIC05OTUzMzg2NTEpO1xyXG5cclxuICAgICAgYSA9IElJKGEsIGIsIGMsIGQsIG1baSsgMF0sICA2LCAtMTk4NjMwODQ0KTtcclxuICAgICAgZCA9IElJKGQsIGEsIGIsIGMsIG1baSsgN10sIDEwLCAgMTEyNjg5MTQxNSk7XHJcbiAgICAgIGMgPSBJSShjLCBkLCBhLCBiLCBtW2krMTRdLCAxNSwgLTE0MTYzNTQ5MDUpO1xyXG4gICAgICBiID0gSUkoYiwgYywgZCwgYSwgbVtpKyA1XSwgMjEsIC01NzQzNDA1NSk7XHJcbiAgICAgIGEgPSBJSShhLCBiLCBjLCBkLCBtW2krMTJdLCAgNiwgIDE3MDA0ODU1NzEpO1xyXG4gICAgICBkID0gSUkoZCwgYSwgYiwgYywgbVtpKyAzXSwgMTAsIC0xODk0OTg2NjA2KTtcclxuICAgICAgYyA9IElJKGMsIGQsIGEsIGIsIG1baSsxMF0sIDE1LCAtMTA1MTUyMyk7XHJcbiAgICAgIGIgPSBJSShiLCBjLCBkLCBhLCBtW2krIDFdLCAyMSwgLTIwNTQ5MjI3OTkpO1xyXG4gICAgICBhID0gSUkoYSwgYiwgYywgZCwgbVtpKyA4XSwgIDYsICAxODczMzEzMzU5KTtcclxuICAgICAgZCA9IElJKGQsIGEsIGIsIGMsIG1baSsxNV0sIDEwLCAtMzA2MTE3NDQpO1xyXG4gICAgICBjID0gSUkoYywgZCwgYSwgYiwgbVtpKyA2XSwgMTUsIC0xNTYwMTk4MzgwKTtcclxuICAgICAgYiA9IElJKGIsIGMsIGQsIGEsIG1baSsxM10sIDIxLCAgMTMwOTE1MTY0OSk7XHJcbiAgICAgIGEgPSBJSShhLCBiLCBjLCBkLCBtW2krIDRdLCAgNiwgLTE0NTUyMzA3MCk7XHJcbiAgICAgIGQgPSBJSShkLCBhLCBiLCBjLCBtW2krMTFdLCAxMCwgLTExMjAyMTAzNzkpO1xyXG4gICAgICBjID0gSUkoYywgZCwgYSwgYiwgbVtpKyAyXSwgMTUsICA3MTg3ODcyNTkpO1xyXG4gICAgICBiID0gSUkoYiwgYywgZCwgYSwgbVtpKyA5XSwgMjEsIC0zNDM0ODU1NTEpO1xyXG5cclxuICAgICAgYSA9IChhICsgYWEpID4+PiAwO1xyXG4gICAgICBiID0gKGIgKyBiYikgPj4+IDA7XHJcbiAgICAgIGMgPSAoYyArIGNjKSA+Pj4gMDtcclxuICAgICAgZCA9IChkICsgZGQpID4+PiAwO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBjcnlwdC5lbmRpYW4oW2EsIGIsIGMsIGRdKTtcclxuICB9O1xyXG5cclxuICAvLyBBdXhpbGlhcnkgZnVuY3Rpb25zXHJcbiAgbWQ1Ll9mZiAgPSBmdW5jdGlvbiAoYSwgYiwgYywgZCwgeCwgcywgdCkge1xyXG4gICAgdmFyIG4gPSBhICsgKGIgJiBjIHwgfmIgJiBkKSArICh4ID4+PiAwKSArIHQ7XHJcbiAgICByZXR1cm4gKChuIDw8IHMpIHwgKG4gPj4+ICgzMiAtIHMpKSkgKyBiO1xyXG4gIH07XHJcbiAgbWQ1Ll9nZyAgPSBmdW5jdGlvbiAoYSwgYiwgYywgZCwgeCwgcywgdCkge1xyXG4gICAgdmFyIG4gPSBhICsgKGIgJiBkIHwgYyAmIH5kKSArICh4ID4+PiAwKSArIHQ7XHJcbiAgICByZXR1cm4gKChuIDw8IHMpIHwgKG4gPj4+ICgzMiAtIHMpKSkgKyBiO1xyXG4gIH07XHJcbiAgbWQ1Ll9oaCAgPSBmdW5jdGlvbiAoYSwgYiwgYywgZCwgeCwgcywgdCkge1xyXG4gICAgdmFyIG4gPSBhICsgKGIgXiBjIF4gZCkgKyAoeCA+Pj4gMCkgKyB0O1xyXG4gICAgcmV0dXJuICgobiA8PCBzKSB8IChuID4+PiAoMzIgLSBzKSkpICsgYjtcclxuICB9O1xyXG4gIG1kNS5faWkgID0gZnVuY3Rpb24gKGEsIGIsIGMsIGQsIHgsIHMsIHQpIHtcclxuICAgIHZhciBuID0gYSArIChjIF4gKGIgfCB+ZCkpICsgKHggPj4+IDApICsgdDtcclxuICAgIHJldHVybiAoKG4gPDwgcykgfCAobiA+Pj4gKDMyIC0gcykpKSArIGI7XHJcbiAgfTtcclxuXHJcbiAgLy8gUGFja2FnZSBwcml2YXRlIGJsb2Nrc2l6ZVxyXG4gIG1kNS5fYmxvY2tzaXplID0gMTY7XHJcbiAgbWQ1Ll9kaWdlc3RzaXplID0gMTY7XHJcblxyXG4gIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG1lc3NhZ2UsIG9wdGlvbnMpIHtcclxuICAgIGlmIChtZXNzYWdlID09PSB1bmRlZmluZWQgfHwgbWVzc2FnZSA9PT0gbnVsbClcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbGxlZ2FsIGFyZ3VtZW50ICcgKyBtZXNzYWdlKTtcclxuXHJcbiAgICB2YXIgZGlnZXN0Ynl0ZXMgPSBjcnlwdC53b3Jkc1RvQnl0ZXMobWQ1KG1lc3NhZ2UsIG9wdGlvbnMpKTtcclxuICAgIHJldHVybiBvcHRpb25zICYmIG9wdGlvbnMuYXNCeXRlcyA/IGRpZ2VzdGJ5dGVzIDpcclxuICAgICAgICBvcHRpb25zICYmIG9wdGlvbnMuYXNTdHJpbmcgPyBiaW4uYnl0ZXNUb1N0cmluZyhkaWdlc3RieXRlcykgOlxyXG4gICAgICAgIGNyeXB0LmJ5dGVzVG9IZXgoZGlnZXN0Ynl0ZXMpO1xyXG4gIH07XHJcblxyXG59KSgpO1xyXG4iLCJpbXBvcnQgKiBhcyBtZDUgZnJvbSAnbWQ1JztcblxuaW1wb3J0IHsgSUFzc2lnbm1lbnRFdmVudCwgSUFzc2lnbm1lbnRMb2dnZXIgfSBmcm9tICcuLi9hc3NpZ25tZW50LWxvZ2dlcic7XG5pbXBvcnQgeyBJQ29uZmlndXJhdGlvblN0b3JlIH0gZnJvbSAnLi4vY29uZmlndXJhdGlvbi1zdG9yZSc7XG5pbXBvcnQgeyBNQVhfRVZFTlRfUVVFVUVfU0laRSB9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBJQWxsb2NhdGlvbiB9IGZyb20gJy4uL2R0by9hbGxvY2F0aW9uLWR0byc7XG5pbXBvcnQgeyBJRXhwZXJpbWVudENvbmZpZ3VyYXRpb24gfSBmcm9tICcuLi9kdG8vZXhwZXJpbWVudC1jb25maWd1cmF0aW9uLWR0byc7XG5pbXBvcnQgeyBmaW5kTWF0Y2hpbmdSdWxlIH0gZnJvbSAnLi4vcnVsZV9ldmFsdWF0b3InO1xuaW1wb3J0IHsgZ2V0U2hhcmQsIGlzU2hhcmRJblJhbmdlIH0gZnJvbSAnLi4vc2hhcmQnO1xuaW1wb3J0IHsgdmFsaWRhdGVOb3RCbGFuayB9IGZyb20gJy4uL3ZhbGlkYXRpb24nO1xuXG4vKipcbiAqIENsaWVudCBmb3IgYXNzaWduaW5nIGV4cGVyaW1lbnQgdmFyaWF0aW9ucy5cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJRXBwb0NsaWVudCB7XG4gIC8qKlxuICAgKiBNYXBzIGEgc3ViamVjdCB0byBhIHZhcmlhdGlvbiBmb3IgYSBnaXZlbiBleHBlcmltZW50LlxuICAgKlxuICAgKiBAcGFyYW0gc3ViamVjdEtleSBhbiBpZGVudGlmaWVyIG9mIHRoZSBleHBlcmltZW50IHN1YmplY3QsIGZvciBleGFtcGxlIGEgdXNlciBJRC5cbiAgICogQHBhcmFtIGV4cGVyaW1lbnRLZXkgZXhwZXJpbWVudCBpZGVudGlmaWVyXG4gICAqIEBwYXJhbSBzdWJqZWN0QXR0cmlidXRlcyBvcHRpb25hbCBhdHRyaWJ1dGVzIGFzc29jaWF0ZWQgd2l0aCB0aGUgc3ViamVjdCwgZm9yIGV4YW1wbGUgbmFtZSBhbmQgZW1haWwuXG4gICAqIFRoZSBzdWJqZWN0IGF0dHJpYnV0ZXMgYXJlIHVzZWQgZm9yIGV2YWx1YXRpbmcgYW55IHRhcmdldGluZyBydWxlcyB0aWVkIHRvIHRoZSBleHBlcmltZW50LlxuICAgKiBAcmV0dXJucyBhIHZhcmlhdGlvbiB2YWx1ZSBpZiB0aGUgc3ViamVjdCBpcyBwYXJ0IG9mIHRoZSBleHBlcmltZW50IHNhbXBsZSwgb3RoZXJ3aXNlIG51bGxcbiAgICogQHB1YmxpY1xuICAgKi9cbiAgZ2V0QXNzaWdubWVudChcbiAgICBzdWJqZWN0S2V5OiBzdHJpbmcsXG4gICAgZXhwZXJpbWVudEtleTogc3RyaW5nLFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgc3ViamVjdEF0dHJpYnV0ZXM/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+LFxuICApOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVwcG9DbGllbnQgaW1wbGVtZW50cyBJRXBwb0NsaWVudCB7XG4gIHByaXZhdGUgcXVldWVkRXZlbnRzOiBJQXNzaWdubWVudEV2ZW50W10gPSBbXTtcbiAgcHJpdmF0ZSBhc3NpZ25tZW50TG9nZ2VyOiBJQXNzaWdubWVudExvZ2dlciA9IG51bGw7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBjb25maWd1cmF0aW9uU3RvcmU6IElDb25maWd1cmF0aW9uU3RvcmUpIHt9XG5cbiAgZ2V0QXNzaWdubWVudChzdWJqZWN0S2V5OiBzdHJpbmcsIGV4cGVyaW1lbnRLZXk6IHN0cmluZywgc3ViamVjdEF0dHJpYnV0ZXMgPSB7fSk6IHN0cmluZyB7XG4gICAgdmFsaWRhdGVOb3RCbGFuayhzdWJqZWN0S2V5LCAnSW52YWxpZCBhcmd1bWVudDogc3ViamVjdEtleSBjYW5ub3QgYmUgYmxhbmsnKTtcbiAgICB2YWxpZGF0ZU5vdEJsYW5rKGV4cGVyaW1lbnRLZXksICdJbnZhbGlkIGFyZ3VtZW50OiBleHBlcmltZW50S2V5IGNhbm5vdCBiZSBibGFuaycpO1xuXG4gICAgY29uc3QgZXhwZXJpbWVudENvbmZpZyA9IHRoaXMuY29uZmlndXJhdGlvblN0b3JlLmdldDxJRXhwZXJpbWVudENvbmZpZ3VyYXRpb24+KGV4cGVyaW1lbnRLZXkpO1xuICAgIGNvbnN0IGFsbG93TGlzdE92ZXJyaWRlID0gdGhpcy5nZXRTdWJqZWN0VmFyaWF0aW9uT3ZlcnJpZGUoc3ViamVjdEtleSwgZXhwZXJpbWVudENvbmZpZyk7XG5cbiAgICBpZiAoYWxsb3dMaXN0T3ZlcnJpZGUpIHJldHVybiBhbGxvd0xpc3RPdmVycmlkZTtcblxuICAgIC8vIENoZWNrIGZvciBkaXNhYmxlZCBmbGFnLlxuICAgIGlmICghZXhwZXJpbWVudENvbmZpZz8uZW5hYmxlZCkgcmV0dXJuIG51bGw7XG5cbiAgICAvLyBBdHRlbXB0IHRvIG1hdGNoIGEgcnVsZSBmcm9tIHRoZSBsaXN0LlxuICAgIGNvbnN0IG1hdGNoZWRSdWxlID0gZmluZE1hdGNoaW5nUnVsZShzdWJqZWN0QXR0cmlidXRlcyB8fCB7fSwgZXhwZXJpbWVudENvbmZpZy5ydWxlcyk7XG4gICAgaWYgKCFtYXRjaGVkUnVsZSkgcmV0dXJuIG51bGw7XG5cbiAgICAvLyBDaGVjayBpZiBzdWJqZWN0IGlzIGluIGFsbG9jYXRpb24gc2FtcGxlLlxuICAgIGNvbnN0IGFsbG9jYXRpb24gPSBleHBlcmltZW50Q29uZmlnLmFsbG9jYXRpb25zW21hdGNoZWRSdWxlLmFsbG9jYXRpb25LZXldO1xuICAgIGlmICghdGhpcy5pc0luRXhwZXJpbWVudFNhbXBsZShzdWJqZWN0S2V5LCBleHBlcmltZW50S2V5LCBleHBlcmltZW50Q29uZmlnLCBhbGxvY2F0aW9uKSlcbiAgICAgIHJldHVybiBudWxsO1xuXG4gICAgLy8gQ29tcHV0ZSB2YXJpYXRpb24gZm9yIHN1YmplY3QuXG4gICAgY29uc3QgeyBzdWJqZWN0U2hhcmRzIH0gPSBleHBlcmltZW50Q29uZmlnO1xuICAgIGNvbnN0IHsgdmFyaWF0aW9ucyB9ID0gYWxsb2NhdGlvbjtcblxuICAgIGNvbnN0IHNoYXJkID0gZ2V0U2hhcmQoYGFzc2lnbm1lbnQtJHtzdWJqZWN0S2V5fS0ke2V4cGVyaW1lbnRLZXl9YCwgc3ViamVjdFNoYXJkcyk7XG4gICAgY29uc3QgYXNzaWduZWRWYXJpYXRpb24gPSB2YXJpYXRpb25zLmZpbmQoKHZhcmlhdGlvbikgPT5cbiAgICAgIGlzU2hhcmRJblJhbmdlKHNoYXJkLCB2YXJpYXRpb24uc2hhcmRSYW5nZSksXG4gICAgKS52YWx1ZTtcblxuICAgIC8vIEZpbmFsbHksIGxvZyBhc3NpZ25tZW50IGFuZCByZXR1cm4gYXNzaWdubWVudC5cbiAgICB0aGlzLmxvZ0Fzc2lnbm1lbnQoZXhwZXJpbWVudEtleSwgYXNzaWduZWRWYXJpYXRpb24sIHN1YmplY3RLZXksIHN1YmplY3RBdHRyaWJ1dGVzKTtcbiAgICByZXR1cm4gYXNzaWduZWRWYXJpYXRpb247XG4gIH1cblxuICBwdWJsaWMgc2V0TG9nZ2VyKGxvZ2dlcjogSUFzc2lnbm1lbnRMb2dnZXIpIHtcbiAgICB0aGlzLmFzc2lnbm1lbnRMb2dnZXIgPSBsb2dnZXI7XG4gICAgdGhpcy5mbHVzaFF1ZXVlZEV2ZW50cygpOyAvLyBsb2cgYW55IGV2ZW50cyB0aGF0IG1heSBoYXZlIGJlZW4gcXVldWVkIHdoaWxlIGluaXRpYWxpemluZ1xuICB9XG5cbiAgcHJpdmF0ZSBmbHVzaFF1ZXVlZEV2ZW50cygpIHtcbiAgICBjb25zdCBldmVudHNUb0ZsdXNoID0gdGhpcy5xdWV1ZWRFdmVudHM7XG4gICAgdGhpcy5xdWV1ZWRFdmVudHMgPSBbXTtcbiAgICB0cnkge1xuICAgICAgZm9yIChjb25zdCBldmVudCBvZiBldmVudHNUb0ZsdXNoKSB7XG4gICAgICAgIHRoaXMuYXNzaWdubWVudExvZ2dlci5sb2dBc3NpZ25tZW50KGV2ZW50KTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcihgW0VwcG8gU0RLXSBFcnJvciBmbHVzaGluZyBhc3NpZ25tZW50IGV2ZW50czogJHtlcnJvci5tZXNzYWdlfWApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbG9nQXNzaWdubWVudChcbiAgICBleHBlcmltZW50OiBzdHJpbmcsXG4gICAgdmFyaWF0aW9uOiBzdHJpbmcsXG4gICAgc3ViamVjdEtleTogc3RyaW5nLFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgc3ViamVjdEF0dHJpYnV0ZXM6IFJlY29yZDxzdHJpbmcsIGFueT4sXG4gICkge1xuICAgIGNvbnN0IGV2ZW50OiBJQXNzaWdubWVudEV2ZW50ID0ge1xuICAgICAgZXhwZXJpbWVudCxcbiAgICAgIHZhcmlhdGlvbixcbiAgICAgIHRpbWVzdGFtcDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgc3ViamVjdDogc3ViamVjdEtleSxcbiAgICAgIHN1YmplY3RBdHRyaWJ1dGVzLFxuICAgIH07XG4gICAgLy8gYXNzaWdubWVudCBsb2dnZXIgbWF5IGJlIG51bGwgd2hpbGUgd2FpdGluZyBmb3IgaW5pdGlhbGl6YXRpb25cbiAgICBpZiAodGhpcy5hc3NpZ25tZW50TG9nZ2VyID09IG51bGwpIHtcbiAgICAgIHRoaXMucXVldWVkRXZlbnRzLmxlbmd0aCA8IE1BWF9FVkVOVF9RVUVVRV9TSVpFICYmIHRoaXMucXVldWVkRXZlbnRzLnB1c2goZXZlbnQpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgdGhpcy5hc3NpZ25tZW50TG9nZ2VyLmxvZ0Fzc2lnbm1lbnQoZXZlbnQpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGBbRXBwbyBTREtdIEVycm9yIGxvZ2dpbmcgYXNzaWdubWVudCBldmVudDogJHtlcnJvci5tZXNzYWdlfWApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0U3ViamVjdFZhcmlhdGlvbk92ZXJyaWRlKFxuICAgIHN1YmplY3RLZXk6IHN0cmluZyxcbiAgICBleHBlcmltZW50Q29uZmlnOiBJRXhwZXJpbWVudENvbmZpZ3VyYXRpb24sXG4gICk6IHN0cmluZyB7XG4gICAgY29uc3Qgc3ViamVjdEhhc2ggPSBtZDUoc3ViamVjdEtleSk7XG4gICAgcmV0dXJuIGV4cGVyaW1lbnRDb25maWc/Lm92ZXJyaWRlc1tzdWJqZWN0SGFzaF07XG4gIH1cblxuICAvKipcbiAgICogVGhpcyBjaGVja3Mgd2hldGhlciB0aGUgc3ViamVjdCBpcyBpbmNsdWRlZCBpbiB0aGUgZXhwZXJpbWVudCBzYW1wbGUuXG4gICAqIEl0IGlzIHVzZWQgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIHN1YmplY3Qgc2hvdWxkIGJlIGFzc2lnbmVkIHRvIGEgdmFyaWFudC5cbiAgICogR2l2ZW4gYSBoYXNoIGZ1bmN0aW9uIG91dHB1dCAoYnVja2V0KSwgY2hlY2sgd2hldGhlciB0aGUgYnVja2V0IGlzIGJldHdlZW4gMCBhbmQgZXhwb3N1cmVfcGVyY2VudCAqIHRvdGFsX2J1Y2tldHMuXG4gICAqL1xuICBwcml2YXRlIGlzSW5FeHBlcmltZW50U2FtcGxlKFxuICAgIHN1YmplY3RLZXk6IHN0cmluZyxcbiAgICBleHBlcmltZW50S2V5OiBzdHJpbmcsXG4gICAgZXhwZXJpbWVudENvbmZpZzogSUV4cGVyaW1lbnRDb25maWd1cmF0aW9uLFxuICAgIGFsbG9jYXRpb246IElBbGxvY2F0aW9uLFxuICApOiBib29sZWFuIHtcbiAgICBjb25zdCB7IHN1YmplY3RTaGFyZHMgfSA9IGV4cGVyaW1lbnRDb25maWc7XG4gICAgY29uc3QgeyBwZXJjZW50RXhwb3N1cmUgfSA9IGFsbG9jYXRpb247XG4gICAgY29uc3Qgc2hhcmQgPSBnZXRTaGFyZChgZXhwb3N1cmUtJHtzdWJqZWN0S2V5fS0ke2V4cGVyaW1lbnRLZXl9YCwgc3ViamVjdFNoYXJkcyk7XG4gICAgcmV0dXJuIHNoYXJkIDw9IHBlcmNlbnRFeHBvc3VyZSAqIHN1YmplY3RTaGFyZHM7XG4gIH1cbn1cbiIsImV4cG9ydCBjb25zdCBSRVFVRVNUX1RJTUVPVVRfTUlMTElTID0gNTAwMDtcbmV4cG9ydCBjb25zdCBCQVNFX1VSTCA9ICdodHRwczovL2VwcG8uY2xvdWQvYXBpJztcbmV4cG9ydCBjb25zdCBTRVNTSU9OX0FTU0lHTk1FTlRfQ09ORklHX0xPQURFRCA9ICdlcHBvLXNlc3Npb24tYXNzaWdubWVudC1jb25maWctbG9hZGVkJztcbmV4cG9ydCBjb25zdCBOVUxMX1NFTlRJTkVMID0gJ0VQUE9fTlVMTCc7XG4vLyBudW1iZXIgb2YgbG9nZ2luZyBldmVudHMgdGhhdCBtYXkgYmUgcXVldWVkIHdoaWxlIHdhaXRpbmcgZm9yIGluaXRpYWxpemF0aW9uXG5leHBvcnQgY29uc3QgTUFYX0VWRU5UX1FVRVVFX1NJWkUgPSAxMDA7XG4iLCJleHBvcnQgZW51bSBPcGVyYXRvclR5cGUge1xuICBNQVRDSEVTID0gJ01BVENIRVMnLFxuICBHVEUgPSAnR1RFJyxcbiAgR1QgPSAnR1QnLFxuICBMVEUgPSAnTFRFJyxcbiAgTFQgPSAnTFQnLFxuICBPTkVfT0YgPSAnT05FX09GJyxcbiAgTk9UX09ORV9PRiA9ICdOT1RfT05FX09GJyxcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb25kaXRpb24ge1xuICBvcGVyYXRvcjogT3BlcmF0b3JUeXBlO1xuICBhdHRyaWJ1dGU6IHN0cmluZztcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgdmFsdWU6IGFueTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJUnVsZSB7XG4gIGFsbG9jYXRpb25LZXk6IHN0cmluZztcbiAgY29uZGl0aW9uczogQ29uZGl0aW9uW107XG59XG4iLCJpbXBvcnQgeyBJQ29uZmlndXJhdGlvblN0b3JlIH0gZnJvbSAnLi9jb25maWd1cmF0aW9uLXN0b3JlJztcbmltcG9ydCB7IElFeHBlcmltZW50Q29uZmlndXJhdGlvbiB9IGZyb20gJy4vZHRvL2V4cGVyaW1lbnQtY29uZmlndXJhdGlvbi1kdG8nO1xuaW1wb3J0IEh0dHBDbGllbnQgZnJvbSAnLi9odHRwLWNsaWVudCc7XG5cbmNvbnN0IFJBQ19FTkRQT0lOVCA9ICcvcmFuZG9taXplZF9hc3NpZ25tZW50L3YyL2NvbmZpZyc7XG5cbmludGVyZmFjZSBJUmFuZG9taXplZEFzc2lnbm1lbnRDb25maWcge1xuICBmbGFnczogUmVjb3JkPHN0cmluZywgSUV4cGVyaW1lbnRDb25maWd1cmF0aW9uPjtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRXhwZXJpbWVudENvbmZpZ3VyYXRpb25SZXF1ZXN0b3Ige1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNvbmZpZ3VyYXRpb25TdG9yZTogSUNvbmZpZ3VyYXRpb25TdG9yZSwgcHJpdmF0ZSBodHRwQ2xpZW50OiBIdHRwQ2xpZW50KSB7fVxuXG4gIGFzeW5jIGZldGNoQW5kU3RvcmVDb25maWd1cmF0aW9ucygpOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIElFeHBlcmltZW50Q29uZmlndXJhdGlvbj4+IHtcbiAgICBjb25zdCByZXNwb25zZURhdGEgPSBhd2FpdCB0aGlzLmh0dHBDbGllbnQuZ2V0PElSYW5kb21pemVkQXNzaWdubWVudENvbmZpZz4oUkFDX0VORFBPSU5UKTtcbiAgICB0aGlzLmNvbmZpZ3VyYXRpb25TdG9yZS5zZXRFbnRyaWVzPElFeHBlcmltZW50Q29uZmlndXJhdGlvbj4ocmVzcG9uc2VEYXRhLmZsYWdzKTtcbiAgICByZXR1cm4gcmVzcG9uc2VEYXRhLmZsYWdzO1xuICB9XG59XG4iLCJpbXBvcnQgeyBBeGlvc0luc3RhbmNlIH0gZnJvbSAnYXhpb3MnO1xuXG5pbnRlcmZhY2UgSVNka1BhcmFtcyB7XG4gIGFwaUtleTogc3RyaW5nO1xuICBzZGtWZXJzaW9uOiBzdHJpbmc7XG4gIHNka05hbWU6IHN0cmluZztcbn1cblxuZXhwb3J0IGNsYXNzIEh0dHBSZXF1ZXN0RXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBtZXNzYWdlOiBzdHJpbmcsIHB1YmxpYyBzdGF0dXM6IG51bWJlcikge1xuICAgIHN1cGVyKG1lc3NhZ2UpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEh0dHBDbGllbnQge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGF4aW9zSW5zdGFuY2U6IEF4aW9zSW5zdGFuY2UsIHByaXZhdGUgc2RrUGFyYW1zOiBJU2RrUGFyYW1zKSB7fVxuXG4gIGFzeW5jIGdldDxUPihyZXNvdXJjZTogc3RyaW5nKTogUHJvbWlzZTxUPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5heGlvc0luc3RhbmNlLmdldDxUPihyZXNvdXJjZSwge1xuICAgICAgICBwYXJhbXM6IHRoaXMuc2RrUGFyYW1zLFxuICAgICAgfSk7XG4gICAgICByZXR1cm4gcmVzcG9uc2UuZGF0YTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdGhpcy5oYW5kbGVIdHRwRXJyb3IoZXJyb3IpO1xuICAgIH1cbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gIHByaXZhdGUgaGFuZGxlSHR0cEVycm9yKGVycm9yOiBhbnkpIHtcbiAgICBjb25zdCBzdGF0dXMgPSBlcnJvcj8ucmVzcG9uc2U/LnN0YXR1cztcbiAgICB0aHJvdyBuZXcgSHR0cFJlcXVlc3RFcnJvcihlcnJvci5tZXNzYWdlLCBzdGF0dXMpO1xuICB9XG59XG4iLCIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG5pbXBvcnQgeyBDb25kaXRpb24sIE9wZXJhdG9yVHlwZSwgSVJ1bGUgfSBmcm9tICcuL2R0by9ydWxlLWR0byc7XG5cbmV4cG9ydCBmdW5jdGlvbiBmaW5kTWF0Y2hpbmdSdWxlKHN1YmplY3RBdHRyaWJ1dGVzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LCBydWxlczogSVJ1bGVbXSk6IElSdWxlIHtcbiAgZm9yIChjb25zdCBydWxlIG9mIHJ1bGVzKSB7XG4gICAgaWYgKG1hdGNoZXNSdWxlKHN1YmplY3RBdHRyaWJ1dGVzLCBydWxlKSkge1xuICAgICAgcmV0dXJuIHJ1bGU7XG4gICAgfVxuICB9XG4gIHJldHVybiBudWxsO1xufVxuXG5mdW5jdGlvbiBtYXRjaGVzUnVsZShzdWJqZWN0QXR0cmlidXRlczogUmVjb3JkPHN0cmluZywgYW55PiwgcnVsZTogSVJ1bGUpOiBib29sZWFuIHtcbiAgY29uc3QgY29uZGl0aW9uRXZhbHVhdGlvbnMgPSBldmFsdWF0ZVJ1bGVDb25kaXRpb25zKHN1YmplY3RBdHRyaWJ1dGVzLCBydWxlLmNvbmRpdGlvbnMpO1xuICByZXR1cm4gIWNvbmRpdGlvbkV2YWx1YXRpb25zLmluY2x1ZGVzKGZhbHNlKTtcbn1cblxuZnVuY3Rpb24gZXZhbHVhdGVSdWxlQ29uZGl0aW9ucyhcbiAgc3ViamVjdEF0dHJpYnV0ZXM6IFJlY29yZDxzdHJpbmcsIGFueT4sXG4gIGNvbmRpdGlvbnM6IENvbmRpdGlvbltdLFxuKTogYm9vbGVhbltdIHtcbiAgcmV0dXJuIGNvbmRpdGlvbnMubWFwKChjb25kaXRpb24pID0+IGV2YWx1YXRlQ29uZGl0aW9uKHN1YmplY3RBdHRyaWJ1dGVzLCBjb25kaXRpb24pKTtcbn1cblxuZnVuY3Rpb24gZXZhbHVhdGVDb25kaXRpb24oc3ViamVjdEF0dHJpYnV0ZXM6IFJlY29yZDxzdHJpbmcsIGFueT4sIGNvbmRpdGlvbjogQ29uZGl0aW9uKTogYm9vbGVhbiB7XG4gIGNvbnN0IHZhbHVlID0gc3ViamVjdEF0dHJpYnV0ZXNbY29uZGl0aW9uLmF0dHJpYnV0ZV07XG4gIGlmICh2YWx1ZSAhPSBudWxsKSB7XG4gICAgc3dpdGNoIChjb25kaXRpb24ub3BlcmF0b3IpIHtcbiAgICAgIGNhc2UgT3BlcmF0b3JUeXBlLkdURTpcbiAgICAgICAgcmV0dXJuIGNvbXBhcmVOdW1iZXIodmFsdWUsIGNvbmRpdGlvbi52YWx1ZSwgKGEsIGIpID0+IGEgPj0gYik7XG4gICAgICBjYXNlIE9wZXJhdG9yVHlwZS5HVDpcbiAgICAgICAgcmV0dXJuIGNvbXBhcmVOdW1iZXIodmFsdWUsIGNvbmRpdGlvbi52YWx1ZSwgKGEsIGIpID0+IGEgPiBiKTtcbiAgICAgIGNhc2UgT3BlcmF0b3JUeXBlLkxURTpcbiAgICAgICAgcmV0dXJuIGNvbXBhcmVOdW1iZXIodmFsdWUsIGNvbmRpdGlvbi52YWx1ZSwgKGEsIGIpID0+IGEgPD0gYik7XG4gICAgICBjYXNlIE9wZXJhdG9yVHlwZS5MVDpcbiAgICAgICAgcmV0dXJuIGNvbXBhcmVOdW1iZXIodmFsdWUsIGNvbmRpdGlvbi52YWx1ZSwgKGEsIGIpID0+IGEgPCBiKTtcbiAgICAgIGNhc2UgT3BlcmF0b3JUeXBlLk1BVENIRVM6XG4gICAgICAgIHJldHVybiBuZXcgUmVnRXhwKGNvbmRpdGlvbi52YWx1ZSBhcyBzdHJpbmcpLnRlc3QodmFsdWUgYXMgc3RyaW5nKTtcbiAgICAgIGNhc2UgT3BlcmF0b3JUeXBlLk9ORV9PRjpcbiAgICAgICAgcmV0dXJuIGlzT25lT2YodmFsdWUsIGNvbmRpdGlvbi52YWx1ZSk7XG4gICAgICBjYXNlIE9wZXJhdG9yVHlwZS5OT1RfT05FX09GOlxuICAgICAgICByZXR1cm4gaXNOb3RPbmVPZih2YWx1ZSwgY29uZGl0aW9uLnZhbHVlKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBpc09uZU9mKGF0dHJpYnV0ZVZhbHVlOiBhbnksIGNvbmRpdGlvblZhbHVlOiBzdHJpbmdbXSkge1xuICByZXR1cm4gZ2V0TWF0Y2hpbmdTdHJpbmdWYWx1ZXMoYXR0cmlidXRlVmFsdWUudG9TdHJpbmcoKSwgY29uZGl0aW9uVmFsdWUpLmxlbmd0aCA+IDA7XG59XG5cbmZ1bmN0aW9uIGlzTm90T25lT2YoYXR0cmlidXRlVmFsdWU6IGFueSwgY29uZGl0aW9uVmFsdWU6IHN0cmluZ1tdKSB7XG4gIHJldHVybiBnZXRNYXRjaGluZ1N0cmluZ1ZhbHVlcyhhdHRyaWJ1dGVWYWx1ZS50b1N0cmluZygpLCBjb25kaXRpb25WYWx1ZSkubGVuZ3RoID09PSAwO1xufVxuXG5mdW5jdGlvbiBnZXRNYXRjaGluZ1N0cmluZ1ZhbHVlcyhhdHRyaWJ1dGVWYWx1ZTogc3RyaW5nLCBjb25kaXRpb25WYWx1ZXM6IHN0cmluZ1tdKTogc3RyaW5nW10ge1xuICByZXR1cm4gY29uZGl0aW9uVmFsdWVzLmZpbHRlcigodmFsdWUpID0+IHZhbHVlLnRvTG93ZXJDYXNlKCkgPT09IGF0dHJpYnV0ZVZhbHVlLnRvTG93ZXJDYXNlKCkpO1xufVxuXG5mdW5jdGlvbiBjb21wYXJlTnVtYmVyKFxuICBhdHRyaWJ1dGVWYWx1ZTogYW55LFxuICBjb25kaXRpb25WYWx1ZTogYW55LFxuICBjb21wYXJlRm46IChhOiBudW1iZXIsIGI6IG51bWJlcikgPT4gYm9vbGVhbixcbikge1xuICByZXR1cm4gKFxuICAgIHR5cGVvZiBhdHRyaWJ1dGVWYWx1ZSA9PT0gJ251bWJlcicgJiZcbiAgICB0eXBlb2YgY29uZGl0aW9uVmFsdWUgPT09ICdudW1iZXInICYmXG4gICAgY29tcGFyZUZuKGF0dHJpYnV0ZVZhbHVlLCBjb25kaXRpb25WYWx1ZSlcbiAgKTtcbn1cbiIsImltcG9ydCAqIGFzIG1kNSBmcm9tICdtZDUnO1xuXG5pbXBvcnQgeyBJU2hhcmRSYW5nZSB9IGZyb20gJy4vZHRvL3ZhcmlhdGlvbi1kdG8nO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2hhcmQoaW5wdXQ6IHN0cmluZywgc3ViamVjdFNoYXJkczogbnVtYmVyKTogbnVtYmVyIHtcbiAgY29uc3QgaGFzaE91dHB1dCA9IG1kNShpbnB1dCk7XG4gIC8vIGdldCB0aGUgZmlyc3QgNCBieXRlcyBvZiB0aGUgbWQ1IGhleCBzdHJpbmcgYW5kIHBhcnNlIGl0IHVzaW5nIGJhc2UgMTZcbiAgLy8gKDggaGV4IGNoYXJhY3RlcnMgcmVwcmVzZW50IDQgYnl0ZXMsIGUuZy4gMHhmZmZmZmZmZiByZXByZXNlbnRzIHRoZSBtYXggNC1ieXRlIGludGVnZXIpXG4gIGNvbnN0IGludEZyb21IYXNoID0gcGFyc2VJbnQoaGFzaE91dHB1dC5zbGljZSgwLCA4KSwgMTYpO1xuICByZXR1cm4gaW50RnJvbUhhc2ggJSBzdWJqZWN0U2hhcmRzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNTaGFyZEluUmFuZ2Uoc2hhcmQ6IG51bWJlciwgcmFuZ2U6IElTaGFyZFJhbmdlKSB7XG4gIHJldHVybiBzaGFyZCA+PSByYW5nZS5zdGFydCAmJiBzaGFyZCA8IHJhbmdlLmVuZDtcbn1cbiIsImV4cG9ydCBjbGFzcyBJbnZhbGlkQXJndW1lbnRFcnJvciBleHRlbmRzIEVycm9yIHt9XG5cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZU5vdEJsYW5rKHZhbHVlOiBzdHJpbmcsIGVycm9yTWVzc2FnZTogc3RyaW5nKSB7XG4gIGlmICh2YWx1ZSA9PSBudWxsIHx8IHZhbHVlLmxlbmd0aCA9PT0gMCkge1xuICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcihlcnJvck1lc3NhZ2UpO1xuICB9XG59XG4iLCIvLyBUaGUgbW9kdWxlIGNhY2hlXG52YXIgX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fID0ge307XG5cbi8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG5mdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuXHR2YXIgY2FjaGVkTW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXTtcblx0aWYgKGNhY2hlZE1vZHVsZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuIGNhY2hlZE1vZHVsZS5leHBvcnRzO1xuXHR9XG5cdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG5cdHZhciBtb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdID0ge1xuXHRcdC8vIG5vIG1vZHVsZS5pZCBuZWVkZWRcblx0XHQvLyBubyBtb2R1bGUubG9hZGVkIG5lZWRlZFxuXHRcdGV4cG9ydHM6IHt9XG5cdH07XG5cblx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG5cdF9fd2VicGFja19tb2R1bGVzX19bbW9kdWxlSWRdKG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG5cdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG5cdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbn1cblxuIiwiaW1wb3J0IHsgSUFzc2lnbm1lbnRMb2dnZXIgfSBmcm9tICcuL2Fzc2lnbm1lbnQtbG9nZ2VyJztcbmltcG9ydCBFcHBvQ2xpZW50LCB7IElFcHBvQ2xpZW50IH0gZnJvbSAnLi9jbGllbnQvZXBwby1jbGllbnQnO1xuaW1wb3J0ICogYXMgY29uc3RhbnRzIGZyb20gJy4vY29uc3RhbnRzJztcbmltcG9ydCBFeHBlcmltZW50Q29uZmlndXJhdGlvblJlcXVlc3RvciBmcm9tICcuL2V4cGVyaW1lbnQtY29uZmlndXJhdGlvbi1yZXF1ZXN0b3InO1xuaW1wb3J0IEh0dHBDbGllbnQgZnJvbSAnLi9odHRwLWNsaWVudCc7XG5pbXBvcnQgKiBhcyB2YWxpZGF0aW9uIGZyb20gJy4vdmFsaWRhdGlvbic7XG5cbmV4cG9ydCB7XG4gIElBc3NpZ25tZW50TG9nZ2VyLFxuICBFcHBvQ2xpZW50LFxuICBJRXBwb0NsaWVudCxcbiAgY29uc3RhbnRzLFxuICBFeHBlcmltZW50Q29uZmlndXJhdGlvblJlcXVlc3RvcixcbiAgSHR0cENsaWVudCxcbiAgdmFsaWRhdGlvbixcbn07XG4iXSwibmFtZXMiOlsiY2hhcmVuYyIsInV0ZjgiLCJzdHJpbmdUb0J5dGVzIiwic3RyIiwiYmluIiwidW5lc2NhcGUiLCJlbmNvZGVVUklDb21wb25lbnQiLCJieXRlc1RvU3RyaW5nIiwiYnl0ZXMiLCJkZWNvZGVVUklDb21wb25lbnQiLCJlc2NhcGUiLCJpIiwibGVuZ3RoIiwicHVzaCIsImNoYXJDb2RlQXQiLCJTdHJpbmciLCJmcm9tQ2hhckNvZGUiLCJqb2luIiwibW9kdWxlIiwiZXhwb3J0cyIsImJhc2U2NG1hcCIsImNyeXB0Iiwicm90bCIsIm4iLCJiIiwicm90ciIsImVuZGlhbiIsImNvbnN0cnVjdG9yIiwiTnVtYmVyIiwicmFuZG9tQnl0ZXMiLCJNYXRoIiwiZmxvb3IiLCJyYW5kb20iLCJieXRlc1RvV29yZHMiLCJ3b3JkcyIsIndvcmRzVG9CeXRlcyIsImJ5dGVzVG9IZXgiLCJoZXgiLCJ0b1N0cmluZyIsImhleFRvQnl0ZXMiLCJjIiwicGFyc2VJbnQiLCJzdWJzdHIiLCJieXRlc1RvQmFzZTY0IiwiYmFzZTY0IiwidHJpcGxldCIsImoiLCJjaGFyQXQiLCJiYXNlNjRUb0J5dGVzIiwicmVwbGFjZSIsImltb2Q0IiwiaW5kZXhPZiIsInBvdyIsImlzQnVmZmVyIiwib2JqIiwicmVhZEZsb2F0TEUiLCJzbGljZSIsImlzU2xvd0J1ZmZlciIsIl9pc0J1ZmZlciIsIm1kNSIsIm1lc3NhZ2UiLCJvcHRpb25zIiwiZW5jb2RpbmciLCJBcnJheSIsInByb3RvdHlwZSIsImNhbGwiLCJpc0FycmF5IiwiVWludDhBcnJheSIsIm0iLCJsIiwiYSIsImQiLCJGRiIsIl9mZiIsIkdHIiwiX2dnIiwiSEgiLCJfaGgiLCJJSSIsIl9paSIsImFhIiwiYmIiLCJjYyIsImRkIiwieCIsInMiLCJ0IiwiX2Jsb2Nrc2l6ZSIsIl9kaWdlc3RzaXplIiwiRXJyb3IiLCJkaWdlc3RieXRlcyIsImFzQnl0ZXMiLCJhc1N0cmluZyIsImNvbmZpZ3VyYXRpb25TdG9yZSIsInF1ZXVlZEV2ZW50cyIsImFzc2lnbm1lbnRMb2dnZXIiLCJnZXRBc3NpZ25tZW50Iiwic3ViamVjdEtleSIsImV4cGVyaW1lbnRLZXkiLCJzdWJqZWN0QXR0cmlidXRlcyIsInZhbGlkYXRlTm90QmxhbmsiLCJleHBlcmltZW50Q29uZmlnIiwidGhpcyIsImdldCIsImFsbG93TGlzdE92ZXJyaWRlIiwiZ2V0U3ViamVjdFZhcmlhdGlvbk92ZXJyaWRlIiwiZW5hYmxlZCIsIm1hdGNoZWRSdWxlIiwiZmluZE1hdGNoaW5nUnVsZSIsInJ1bGVzIiwiYWxsb2NhdGlvbiIsImFsbG9jYXRpb25zIiwiYWxsb2NhdGlvbktleSIsImlzSW5FeHBlcmltZW50U2FtcGxlIiwic3ViamVjdFNoYXJkcyIsInZhcmlhdGlvbnMiLCJzaGFyZCIsImdldFNoYXJkIiwiYXNzaWduZWRWYXJpYXRpb24iLCJmaW5kIiwidmFyaWF0aW9uIiwiaXNTaGFyZEluUmFuZ2UiLCJzaGFyZFJhbmdlIiwidmFsdWUiLCJsb2dBc3NpZ25tZW50Iiwic2V0TG9nZ2VyIiwibG9nZ2VyIiwiZmx1c2hRdWV1ZWRFdmVudHMiLCJldmVudHNUb0ZsdXNoIiwiZXZlbnQiLCJlcnJvciIsImNvbnNvbGUiLCJleHBlcmltZW50IiwidGltZXN0YW1wIiwiRGF0ZSIsInRvSVNPU3RyaW5nIiwic3ViamVjdCIsIk1BWF9FVkVOVF9RVUVVRV9TSVpFIiwic3ViamVjdEhhc2giLCJvdmVycmlkZXMiLCJwZXJjZW50RXhwb3N1cmUiLCJSRVFVRVNUX1RJTUVPVVRfTUlMTElTIiwiQkFTRV9VUkwiLCJTRVNTSU9OX0FTU0lHTk1FTlRfQ09ORklHX0xPQURFRCIsIk5VTExfU0VOVElORUwiLCJPcGVyYXRvclR5cGUiLCJodHRwQ2xpZW50IiwiYXN5bmMiLCJyZXNwb25zZURhdGEiLCJzZXRFbnRyaWVzIiwiZmxhZ3MiLCJIdHRwUmVxdWVzdEVycm9yIiwic3RhdHVzIiwic3VwZXIiLCJheGlvc0luc3RhbmNlIiwic2RrUGFyYW1zIiwicmVzb3VyY2UiLCJwYXJhbXMiLCJkYXRhIiwiaGFuZGxlSHR0cEVycm9yIiwicmVzcG9uc2UiLCJtYXRjaGVzUnVsZSIsInJ1bGUiLCJjb25kaXRpb25FdmFsdWF0aW9ucyIsImNvbmRpdGlvbnMiLCJtYXAiLCJjb25kaXRpb24iLCJhdHRyaWJ1dGUiLCJvcGVyYXRvciIsIkdURSIsImNvbXBhcmVOdW1iZXIiLCJHVCIsIkxURSIsIkxUIiwiTUFUQ0hFUyIsIlJlZ0V4cCIsInRlc3QiLCJPTkVfT0YiLCJhdHRyaWJ1dGVWYWx1ZSIsImNvbmRpdGlvblZhbHVlIiwiZ2V0TWF0Y2hpbmdTdHJpbmdWYWx1ZXMiLCJOT1RfT05FX09GIiwiaXNOb3RPbmVPZiIsImV2YWx1YXRlQ29uZGl0aW9uIiwiZXZhbHVhdGVSdWxlQ29uZGl0aW9ucyIsImluY2x1ZGVzIiwiY29uZGl0aW9uVmFsdWVzIiwiZmlsdGVyIiwidG9Mb3dlckNhc2UiLCJjb21wYXJlRm4iLCJpbnB1dCIsImhhc2hPdXRwdXQiLCJyYW5nZSIsInN0YXJ0IiwiZW5kIiwiSW52YWxpZEFyZ3VtZW50RXJyb3IiLCJlcnJvck1lc3NhZ2UiLCJfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18iLCJfX3dlYnBhY2tfcmVxdWlyZV9fIiwibW9kdWxlSWQiLCJjYWNoZWRNb2R1bGUiLCJ1bmRlZmluZWQiLCJfX3dlYnBhY2tfbW9kdWxlc19fIiwiRXBwb0NsaWVudCIsImNvbnN0YW50cyIsIkV4cGVyaW1lbnRDb25maWd1cmF0aW9uUmVxdWVzdG9yIiwiSHR0cENsaWVudCIsInZhbGlkYXRpb24iXSwic291cmNlUm9vdCI6IiJ9
//# sourceMappingURL=data:application/json;charset=utf-8;base64,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SixFQUFXdkksTUFBTSxFQUFHLEdBQUksSUFDaEMwRCxDQUN2QixFQUVBLDBCQUErQkUsRUFBZTRFLEdBQzVDLE9BQU81RSxHQUFTNEUsRUFBTUMsT0FBUzdFLEVBQVE0RSxFQUFNRSxHQUMvQyw4SENkQSxNQUFhQyxVQUE2QjFHLE9BQTFDLHlCQUVBLDRCQUFpQ2tDLEVBQWV5RSxHQUM5QyxHQUFhLE1BQVR6RSxHQUFrQyxJQUFqQkEsRUFBTS9HLE9BQ3pCLE1BQU0sSUFBSXVMLEVBQXFCQyxFQUVuQyxJQ0xJQyxFQUEyQixDQUFDLEVBR2hDLFNBQVNDLEVBQW9CQyxHQUU1QixJQUFJQyxFQUFlSCxFQUF5QkUsR0FDNUMsUUFBcUJFLElBQWpCRCxFQUNILE9BQU9BLEVBQWFyTCxRQUdyQixJQUFJRCxFQUFTbUwsRUFBeUJFLEdBQVksQ0FHakRwTCxRQUFTLENBQUMsR0FPWCxPQUhBdUwsRUFBb0JILEdBQVVyTCxFQUFRQSxFQUFPQyxRQUFTbUwsR0FHL0NwTCxFQUFPQyxPQUNmLG1MQ3JCQSxlQVNFLEVBQUF3TCxXQVRLLFVBRVAsZUFTRSxFQUFBQyxVQUFBQSxFQVJGLGVBU0UsRUFBQUMsaUNBVEssVUFDUCxjQVNFLEVBQUFDLFdBVEssVUFDUCxlQVNFLEVBQUFDLFdBQUFBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZXBwby8uL25vZGVfbW9kdWxlcy9jaGFyZW5jL2NoYXJlbmMuanMiLCJ3ZWJwYWNrOi8vZXBwby8uL25vZGVfbW9kdWxlcy9jcnlwdC9jcnlwdC5qcyIsIndlYnBhY2s6Ly9lcHBvLy4vbm9kZV9tb2R1bGVzL2lzLWJ1ZmZlci9pbmRleC5qcyIsIndlYnBhY2s6Ly9lcHBvLy4vbm9kZV9tb2R1bGVzL21kNS9tZDUuanMiLCJ3ZWJwYWNrOi8vZXBwby8uL3NyYy9jbGllbnQvZXBwby1jbGllbnQudHMiLCJ3ZWJwYWNrOi8vZXBwby8uL3NyYy9jb25zdGFudHMudHMiLCJ3ZWJwYWNrOi8vZXBwby8uL3NyYy9kdG8vcnVsZS1kdG8udHMiLCJ3ZWJwYWNrOi8vZXBwby8uL3NyYy9leHBlcmltZW50LWNvbmZpZ3VyYXRpb24tcmVxdWVzdG9yLnRzIiwid2VicGFjazovL2VwcG8vLi9zcmMvaHR0cC1jbGllbnQudHMiLCJ3ZWJwYWNrOi8vZXBwby8uL3NyYy9ydWxlX2V2YWx1YXRvci50cyIsIndlYnBhY2s6Ly9lcHBvLy4vc3JjL3NoYXJkLnRzIiwid2VicGFjazovL2VwcG8vLi9zcmMvdmFsaWRhdGlvbi50cyIsIndlYnBhY2s6Ly9lcHBvL3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovL2VwcG8vLi9zcmMvaW5kZXgudHMiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIGNoYXJlbmMgPSB7XG4gIC8vIFVURi04IGVuY29kaW5nXG4gIHV0Zjg6IHtcbiAgICAvLyBDb252ZXJ0IGEgc3RyaW5nIHRvIGEgYnl0ZSBhcnJheVxuICAgIHN0cmluZ1RvQnl0ZXM6IGZ1bmN0aW9uKHN0cikge1xuICAgICAgcmV0dXJuIGNoYXJlbmMuYmluLnN0cmluZ1RvQnl0ZXModW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KHN0cikpKTtcbiAgICB9LFxuXG4gICAgLy8gQ29udmVydCBhIGJ5dGUgYXJyYXkgdG8gYSBzdHJpbmdcbiAgICBieXRlc1RvU3RyaW5nOiBmdW5jdGlvbihieXRlcykge1xuICAgICAgcmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChlc2NhcGUoY2hhcmVuYy5iaW4uYnl0ZXNUb1N0cmluZyhieXRlcykpKTtcbiAgICB9XG4gIH0sXG5cbiAgLy8gQmluYXJ5IGVuY29kaW5nXG4gIGJpbjoge1xuICAgIC8vIENvbnZlcnQgYSBzdHJpbmcgdG8gYSBieXRlIGFycmF5XG4gICAgc3RyaW5nVG9CeXRlczogZnVuY3Rpb24oc3RyKSB7XG4gICAgICBmb3IgKHZhciBieXRlcyA9IFtdLCBpID0gMDsgaSA8IHN0ci5sZW5ndGg7IGkrKylcbiAgICAgICAgYnl0ZXMucHVzaChzdHIuY2hhckNvZGVBdChpKSAmIDB4RkYpO1xuICAgICAgcmV0dXJuIGJ5dGVzO1xuICAgIH0sXG5cbiAgICAvLyBDb252ZXJ0IGEgYnl0ZSBhcnJheSB0byBhIHN0cmluZ1xuICAgIGJ5dGVzVG9TdHJpbmc6IGZ1bmN0aW9uKGJ5dGVzKSB7XG4gICAgICBmb3IgKHZhciBzdHIgPSBbXSwgaSA9IDA7IGkgPCBieXRlcy5sZW5ndGg7IGkrKylcbiAgICAgICAgc3RyLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZShieXRlc1tpXSkpO1xuICAgICAgcmV0dXJuIHN0ci5qb2luKCcnKTtcbiAgICB9XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gY2hhcmVuYztcbiIsIihmdW5jdGlvbigpIHtcbiAgdmFyIGJhc2U2NG1hcFxuICAgICAgPSAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLycsXG5cbiAgY3J5cHQgPSB7XG4gICAgLy8gQml0LXdpc2Ugcm90YXRpb24gbGVmdFxuICAgIHJvdGw6IGZ1bmN0aW9uKG4sIGIpIHtcbiAgICAgIHJldHVybiAobiA8PCBiKSB8IChuID4+PiAoMzIgLSBiKSk7XG4gICAgfSxcblxuICAgIC8vIEJpdC13aXNlIHJvdGF0aW9uIHJpZ2h0XG4gICAgcm90cjogZnVuY3Rpb24obiwgYikge1xuICAgICAgcmV0dXJuIChuIDw8ICgzMiAtIGIpKSB8IChuID4+PiBiKTtcbiAgICB9LFxuXG4gICAgLy8gU3dhcCBiaWctZW5kaWFuIHRvIGxpdHRsZS1lbmRpYW4gYW5kIHZpY2UgdmVyc2FcbiAgICBlbmRpYW46IGZ1bmN0aW9uKG4pIHtcbiAgICAgIC8vIElmIG51bWJlciBnaXZlbiwgc3dhcCBlbmRpYW5cbiAgICAgIGlmIChuLmNvbnN0cnVjdG9yID09IE51bWJlcikge1xuICAgICAgICByZXR1cm4gY3J5cHQucm90bChuLCA4KSAmIDB4MDBGRjAwRkYgfCBjcnlwdC5yb3RsKG4sIDI0KSAmIDB4RkYwMEZGMDA7XG4gICAgICB9XG5cbiAgICAgIC8vIEVsc2UsIGFzc3VtZSBhcnJheSBhbmQgc3dhcCBhbGwgaXRlbXNcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbi5sZW5ndGg7IGkrKylcbiAgICAgICAgbltpXSA9IGNyeXB0LmVuZGlhbihuW2ldKTtcbiAgICAgIHJldHVybiBuO1xuICAgIH0sXG5cbiAgICAvLyBHZW5lcmF0ZSBhbiBhcnJheSBvZiBhbnkgbGVuZ3RoIG9mIHJhbmRvbSBieXRlc1xuICAgIHJhbmRvbUJ5dGVzOiBmdW5jdGlvbihuKSB7XG4gICAgICBmb3IgKHZhciBieXRlcyA9IFtdOyBuID4gMDsgbi0tKVxuICAgICAgICBieXRlcy5wdXNoKE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDI1NikpO1xuICAgICAgcmV0dXJuIGJ5dGVzO1xuICAgIH0sXG5cbiAgICAvLyBDb252ZXJ0IGEgYnl0ZSBhcnJheSB0byBiaWctZW5kaWFuIDMyLWJpdCB3b3Jkc1xuICAgIGJ5dGVzVG9Xb3JkczogZnVuY3Rpb24oYnl0ZXMpIHtcbiAgICAgIGZvciAodmFyIHdvcmRzID0gW10sIGkgPSAwLCBiID0gMDsgaSA8IGJ5dGVzLmxlbmd0aDsgaSsrLCBiICs9IDgpXG4gICAgICAgIHdvcmRzW2IgPj4+IDVdIHw9IGJ5dGVzW2ldIDw8ICgyNCAtIGIgJSAzMik7XG4gICAgICByZXR1cm4gd29yZHM7XG4gICAgfSxcblxuICAgIC8vIENvbnZlcnQgYmlnLWVuZGlhbiAzMi1iaXQgd29yZHMgdG8gYSBieXRlIGFycmF5XG4gICAgd29yZHNUb0J5dGVzOiBmdW5jdGlvbih3b3Jkcykge1xuICAgICAgZm9yICh2YXIgYnl0ZXMgPSBbXSwgYiA9IDA7IGIgPCB3b3Jkcy5sZW5ndGggKiAzMjsgYiArPSA4KVxuICAgICAgICBieXRlcy5wdXNoKCh3b3Jkc1tiID4+PiA1XSA+Pj4gKDI0IC0gYiAlIDMyKSkgJiAweEZGKTtcbiAgICAgIHJldHVybiBieXRlcztcbiAgICB9LFxuXG4gICAgLy8gQ29udmVydCBhIGJ5dGUgYXJyYXkgdG8gYSBoZXggc3RyaW5nXG4gICAgYnl0ZXNUb0hleDogZnVuY3Rpb24oYnl0ZXMpIHtcbiAgICAgIGZvciAodmFyIGhleCA9IFtdLCBpID0gMDsgaSA8IGJ5dGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGhleC5wdXNoKChieXRlc1tpXSA+Pj4gNCkudG9TdHJpbmcoMTYpKTtcbiAgICAgICAgaGV4LnB1c2goKGJ5dGVzW2ldICYgMHhGKS50b1N0cmluZygxNikpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGhleC5qb2luKCcnKTtcbiAgICB9LFxuXG4gICAgLy8gQ29udmVydCBhIGhleCBzdHJpbmcgdG8gYSBieXRlIGFycmF5XG4gICAgaGV4VG9CeXRlczogZnVuY3Rpb24oaGV4KSB7XG4gICAgICBmb3IgKHZhciBieXRlcyA9IFtdLCBjID0gMDsgYyA8IGhleC5sZW5ndGg7IGMgKz0gMilcbiAgICAgICAgYnl0ZXMucHVzaChwYXJzZUludChoZXguc3Vic3RyKGMsIDIpLCAxNikpO1xuICAgICAgcmV0dXJuIGJ5dGVzO1xuICAgIH0sXG5cbiAgICAvLyBDb252ZXJ0IGEgYnl0ZSBhcnJheSB0byBhIGJhc2UtNjQgc3RyaW5nXG4gICAgYnl0ZXNUb0Jhc2U2NDogZnVuY3Rpb24oYnl0ZXMpIHtcbiAgICAgIGZvciAodmFyIGJhc2U2NCA9IFtdLCBpID0gMDsgaSA8IGJ5dGVzLmxlbmd0aDsgaSArPSAzKSB7XG4gICAgICAgIHZhciB0cmlwbGV0ID0gKGJ5dGVzW2ldIDw8IDE2KSB8IChieXRlc1tpICsgMV0gPDwgOCkgfCBieXRlc1tpICsgMl07XG4gICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgNDsgaisrKVxuICAgICAgICAgIGlmIChpICogOCArIGogKiA2IDw9IGJ5dGVzLmxlbmd0aCAqIDgpXG4gICAgICAgICAgICBiYXNlNjQucHVzaChiYXNlNjRtYXAuY2hhckF0KCh0cmlwbGV0ID4+PiA2ICogKDMgLSBqKSkgJiAweDNGKSk7XG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgYmFzZTY0LnB1c2goJz0nKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBiYXNlNjQuam9pbignJyk7XG4gICAgfSxcblxuICAgIC8vIENvbnZlcnQgYSBiYXNlLTY0IHN0cmluZyB0byBhIGJ5dGUgYXJyYXlcbiAgICBiYXNlNjRUb0J5dGVzOiBmdW5jdGlvbihiYXNlNjQpIHtcbiAgICAgIC8vIFJlbW92ZSBub24tYmFzZS02NCBjaGFyYWN0ZXJzXG4gICAgICBiYXNlNjQgPSBiYXNlNjQucmVwbGFjZSgvW15BLVowLTkrXFwvXS9pZywgJycpO1xuXG4gICAgICBmb3IgKHZhciBieXRlcyA9IFtdLCBpID0gMCwgaW1vZDQgPSAwOyBpIDwgYmFzZTY0Lmxlbmd0aDtcbiAgICAgICAgICBpbW9kNCA9ICsraSAlIDQpIHtcbiAgICAgICAgaWYgKGltb2Q0ID09IDApIGNvbnRpbnVlO1xuICAgICAgICBieXRlcy5wdXNoKCgoYmFzZTY0bWFwLmluZGV4T2YoYmFzZTY0LmNoYXJBdChpIC0gMSkpXG4gICAgICAgICAgICAmIChNYXRoLnBvdygyLCAtMiAqIGltb2Q0ICsgOCkgLSAxKSkgPDwgKGltb2Q0ICogMikpXG4gICAgICAgICAgICB8IChiYXNlNjRtYXAuaW5kZXhPZihiYXNlNjQuY2hhckF0KGkpKSA+Pj4gKDYgLSBpbW9kNCAqIDIpKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gYnl0ZXM7XG4gICAgfVxuICB9O1xuXG4gIG1vZHVsZS5leHBvcnRzID0gY3J5cHQ7XG59KSgpO1xuIiwiLyohXG4gKiBEZXRlcm1pbmUgaWYgYW4gb2JqZWN0IGlzIGEgQnVmZmVyXG4gKlxuICogQGF1dGhvciAgIEZlcm9zcyBBYm91a2hhZGlqZWggPGh0dHBzOi8vZmVyb3NzLm9yZz5cbiAqIEBsaWNlbnNlICBNSVRcbiAqL1xuXG4vLyBUaGUgX2lzQnVmZmVyIGNoZWNrIGlzIGZvciBTYWZhcmkgNS03IHN1cHBvcnQsIGJlY2F1c2UgaXQncyBtaXNzaW5nXG4vLyBPYmplY3QucHJvdG90eXBlLmNvbnN0cnVjdG9yLiBSZW1vdmUgdGhpcyBldmVudHVhbGx5XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmopIHtcbiAgcmV0dXJuIG9iaiAhPSBudWxsICYmIChpc0J1ZmZlcihvYmopIHx8IGlzU2xvd0J1ZmZlcihvYmopIHx8ICEhb2JqLl9pc0J1ZmZlcilcbn1cblxuZnVuY3Rpb24gaXNCdWZmZXIgKG9iaikge1xuICByZXR1cm4gISFvYmouY29uc3RydWN0b3IgJiYgdHlwZW9mIG9iai5jb25zdHJ1Y3Rvci5pc0J1ZmZlciA9PT0gJ2Z1bmN0aW9uJyAmJiBvYmouY29uc3RydWN0b3IuaXNCdWZmZXIob2JqKVxufVxuXG4vLyBGb3IgTm9kZSB2MC4xMCBzdXBwb3J0LiBSZW1vdmUgdGhpcyBldmVudHVhbGx5LlxuZnVuY3Rpb24gaXNTbG93QnVmZmVyIChvYmopIHtcbiAgcmV0dXJuIHR5cGVvZiBvYmoucmVhZEZsb2F0TEUgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIG9iai5zbGljZSA9PT0gJ2Z1bmN0aW9uJyAmJiBpc0J1ZmZlcihvYmouc2xpY2UoMCwgMCkpXG59XG4iLCIoZnVuY3Rpb24oKXtcclxuICB2YXIgY3J5cHQgPSByZXF1aXJlKCdjcnlwdCcpLFxyXG4gICAgICB1dGY4ID0gcmVxdWlyZSgnY2hhcmVuYycpLnV0ZjgsXHJcbiAgICAgIGlzQnVmZmVyID0gcmVxdWlyZSgnaXMtYnVmZmVyJyksXHJcbiAgICAgIGJpbiA9IHJlcXVpcmUoJ2NoYXJlbmMnKS5iaW4sXHJcblxyXG4gIC8vIFRoZSBjb3JlXHJcbiAgbWQ1ID0gZnVuY3Rpb24gKG1lc3NhZ2UsIG9wdGlvbnMpIHtcclxuICAgIC8vIENvbnZlcnQgdG8gYnl0ZSBhcnJheVxyXG4gICAgaWYgKG1lc3NhZ2UuY29uc3RydWN0b3IgPT0gU3RyaW5nKVxyXG4gICAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLmVuY29kaW5nID09PSAnYmluYXJ5JylcclxuICAgICAgICBtZXNzYWdlID0gYmluLnN0cmluZ1RvQnl0ZXMobWVzc2FnZSk7XHJcbiAgICAgIGVsc2VcclxuICAgICAgICBtZXNzYWdlID0gdXRmOC5zdHJpbmdUb0J5dGVzKG1lc3NhZ2UpO1xyXG4gICAgZWxzZSBpZiAoaXNCdWZmZXIobWVzc2FnZSkpXHJcbiAgICAgIG1lc3NhZ2UgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChtZXNzYWdlLCAwKTtcclxuICAgIGVsc2UgaWYgKCFBcnJheS5pc0FycmF5KG1lc3NhZ2UpICYmIG1lc3NhZ2UuY29uc3RydWN0b3IgIT09IFVpbnQ4QXJyYXkpXHJcbiAgICAgIG1lc3NhZ2UgPSBtZXNzYWdlLnRvU3RyaW5nKCk7XHJcbiAgICAvLyBlbHNlLCBhc3N1bWUgYnl0ZSBhcnJheSBhbHJlYWR5XHJcblxyXG4gICAgdmFyIG0gPSBjcnlwdC5ieXRlc1RvV29yZHMobWVzc2FnZSksXHJcbiAgICAgICAgbCA9IG1lc3NhZ2UubGVuZ3RoICogOCxcclxuICAgICAgICBhID0gIDE3MzI1ODQxOTMsXHJcbiAgICAgICAgYiA9IC0yNzE3MzM4NzksXHJcbiAgICAgICAgYyA9IC0xNzMyNTg0MTk0LFxyXG4gICAgICAgIGQgPSAgMjcxNzMzODc4O1xyXG5cclxuICAgIC8vIFN3YXAgZW5kaWFuXHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG0ubGVuZ3RoOyBpKyspIHtcclxuICAgICAgbVtpXSA9ICgobVtpXSA8PCAgOCkgfCAobVtpXSA+Pj4gMjQpKSAmIDB4MDBGRjAwRkYgfFxyXG4gICAgICAgICAgICAgKChtW2ldIDw8IDI0KSB8IChtW2ldID4+PiAgOCkpICYgMHhGRjAwRkYwMDtcclxuICAgIH1cclxuXHJcbiAgICAvLyBQYWRkaW5nXHJcbiAgICBtW2wgPj4+IDVdIHw9IDB4ODAgPDwgKGwgJSAzMik7XHJcbiAgICBtWygoKGwgKyA2NCkgPj4+IDkpIDw8IDQpICsgMTRdID0gbDtcclxuXHJcbiAgICAvLyBNZXRob2Qgc2hvcnRjdXRzXHJcbiAgICB2YXIgRkYgPSBtZDUuX2ZmLFxyXG4gICAgICAgIEdHID0gbWQ1Ll9nZyxcclxuICAgICAgICBISCA9IG1kNS5faGgsXHJcbiAgICAgICAgSUkgPSBtZDUuX2lpO1xyXG5cclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbS5sZW5ndGg7IGkgKz0gMTYpIHtcclxuXHJcbiAgICAgIHZhciBhYSA9IGEsXHJcbiAgICAgICAgICBiYiA9IGIsXHJcbiAgICAgICAgICBjYyA9IGMsXHJcbiAgICAgICAgICBkZCA9IGQ7XHJcblxyXG4gICAgICBhID0gRkYoYSwgYiwgYywgZCwgbVtpKyAwXSwgIDcsIC02ODA4NzY5MzYpO1xyXG4gICAgICBkID0gRkYoZCwgYSwgYiwgYywgbVtpKyAxXSwgMTIsIC0zODk1NjQ1ODYpO1xyXG4gICAgICBjID0gRkYoYywgZCwgYSwgYiwgbVtpKyAyXSwgMTcsICA2MDYxMDU4MTkpO1xyXG4gICAgICBiID0gRkYoYiwgYywgZCwgYSwgbVtpKyAzXSwgMjIsIC0xMDQ0NTI1MzMwKTtcclxuICAgICAgYSA9IEZGKGEsIGIsIGMsIGQsIG1baSsgNF0sICA3LCAtMTc2NDE4ODk3KTtcclxuICAgICAgZCA9IEZGKGQsIGEsIGIsIGMsIG1baSsgNV0sIDEyLCAgMTIwMDA4MDQyNik7XHJcbiAgICAgIGMgPSBGRihjLCBkLCBhLCBiLCBtW2krIDZdLCAxNywgLTE0NzMyMzEzNDEpO1xyXG4gICAgICBiID0gRkYoYiwgYywgZCwgYSwgbVtpKyA3XSwgMjIsIC00NTcwNTk4Myk7XHJcbiAgICAgIGEgPSBGRihhLCBiLCBjLCBkLCBtW2krIDhdLCAgNywgIDE3NzAwMzU0MTYpO1xyXG4gICAgICBkID0gRkYoZCwgYSwgYiwgYywgbVtpKyA5XSwgMTIsIC0xOTU4NDE0NDE3KTtcclxuICAgICAgYyA9IEZGKGMsIGQsIGEsIGIsIG1baSsxMF0sIDE3LCAtNDIwNjMpO1xyXG4gICAgICBiID0gRkYoYiwgYywgZCwgYSwgbVtpKzExXSwgMjIsIC0xOTkwNDA0MTYyKTtcclxuICAgICAgYSA9IEZGKGEsIGIsIGMsIGQsIG1baSsxMl0sICA3LCAgMTgwNDYwMzY4Mik7XHJcbiAgICAgIGQgPSBGRihkLCBhLCBiLCBjLCBtW2krMTNdLCAxMiwgLTQwMzQxMTAxKTtcclxuICAgICAgYyA9IEZGKGMsIGQsIGEsIGIsIG1baSsxNF0sIDE3LCAtMTUwMjAwMjI5MCk7XHJcbiAgICAgIGIgPSBGRihiLCBjLCBkLCBhLCBtW2krMTVdLCAyMiwgIDEyMzY1MzUzMjkpO1xyXG5cclxuICAgICAgYSA9IEdHKGEsIGIsIGMsIGQsIG1baSsgMV0sICA1LCAtMTY1Nzk2NTEwKTtcclxuICAgICAgZCA9IEdHKGQsIGEsIGIsIGMsIG1baSsgNl0sICA5LCAtMTA2OTUwMTYzMik7XHJcbiAgICAgIGMgPSBHRyhjLCBkLCBhLCBiLCBtW2krMTFdLCAxNCwgIDY0MzcxNzcxMyk7XHJcbiAgICAgIGIgPSBHRyhiLCBjLCBkLCBhLCBtW2krIDBdLCAyMCwgLTM3Mzg5NzMwMik7XHJcbiAgICAgIGEgPSBHRyhhLCBiLCBjLCBkLCBtW2krIDVdLCAgNSwgLTcwMTU1ODY5MSk7XHJcbiAgICAgIGQgPSBHRyhkLCBhLCBiLCBjLCBtW2krMTBdLCAgOSwgIDM4MDE2MDgzKTtcclxuICAgICAgYyA9IEdHKGMsIGQsIGEsIGIsIG1baSsxNV0sIDE0LCAtNjYwNDc4MzM1KTtcclxuICAgICAgYiA9IEdHKGIsIGMsIGQsIGEsIG1baSsgNF0sIDIwLCAtNDA1NTM3ODQ4KTtcclxuICAgICAgYSA9IEdHKGEsIGIsIGMsIGQsIG1baSsgOV0sICA1LCAgNTY4NDQ2NDM4KTtcclxuICAgICAgZCA9IEdHKGQsIGEsIGIsIGMsIG1baSsxNF0sICA5LCAtMTAxOTgwMzY5MCk7XHJcbiAgICAgIGMgPSBHRyhjLCBkLCBhLCBiLCBtW2krIDNdLCAxNCwgLTE4NzM2Mzk2MSk7XHJcbiAgICAgIGIgPSBHRyhiLCBjLCBkLCBhLCBtW2krIDhdLCAyMCwgIDExNjM1MzE1MDEpO1xyXG4gICAgICBhID0gR0coYSwgYiwgYywgZCwgbVtpKzEzXSwgIDUsIC0xNDQ0NjgxNDY3KTtcclxuICAgICAgZCA9IEdHKGQsIGEsIGIsIGMsIG1baSsgMl0sICA5LCAtNTE0MDM3ODQpO1xyXG4gICAgICBjID0gR0coYywgZCwgYSwgYiwgbVtpKyA3XSwgMTQsICAxNzM1MzI4NDczKTtcclxuICAgICAgYiA9IEdHKGIsIGMsIGQsIGEsIG1baSsxMl0sIDIwLCAtMTkyNjYwNzczNCk7XHJcblxyXG4gICAgICBhID0gSEgoYSwgYiwgYywgZCwgbVtpKyA1XSwgIDQsIC0zNzg1NTgpO1xyXG4gICAgICBkID0gSEgoZCwgYSwgYiwgYywgbVtpKyA4XSwgMTEsIC0yMDIyNTc0NDYzKTtcclxuICAgICAgYyA9IEhIKGMsIGQsIGEsIGIsIG1baSsxMV0sIDE2LCAgMTgzOTAzMDU2Mik7XHJcbiAgICAgIGIgPSBISChiLCBjLCBkLCBhLCBtW2krMTRdLCAyMywgLTM1MzA5NTU2KTtcclxuICAgICAgYSA9IEhIKGEsIGIsIGMsIGQsIG1baSsgMV0sICA0LCAtMTUzMDk5MjA2MCk7XHJcbiAgICAgIGQgPSBISChkLCBhLCBiLCBjLCBtW2krIDRdLCAxMSwgIDEyNzI4OTMzNTMpO1xyXG4gICAgICBjID0gSEgoYywgZCwgYSwgYiwgbVtpKyA3XSwgMTYsIC0xNTU0OTc2MzIpO1xyXG4gICAgICBiID0gSEgoYiwgYywgZCwgYSwgbVtpKzEwXSwgMjMsIC0xMDk0NzMwNjQwKTtcclxuICAgICAgYSA9IEhIKGEsIGIsIGMsIGQsIG1baSsxM10sICA0LCAgNjgxMjc5MTc0KTtcclxuICAgICAgZCA9IEhIKGQsIGEsIGIsIGMsIG1baSsgMF0sIDExLCAtMzU4NTM3MjIyKTtcclxuICAgICAgYyA9IEhIKGMsIGQsIGEsIGIsIG1baSsgM10sIDE2LCAtNzIyNTIxOTc5KTtcclxuICAgICAgYiA9IEhIKGIsIGMsIGQsIGEsIG1baSsgNl0sIDIzLCAgNzYwMjkxODkpO1xyXG4gICAgICBhID0gSEgoYSwgYiwgYywgZCwgbVtpKyA5XSwgIDQsIC02NDAzNjQ0ODcpO1xyXG4gICAgICBkID0gSEgoZCwgYSwgYiwgYywgbVtpKzEyXSwgMTEsIC00MjE4MTU4MzUpO1xyXG4gICAgICBjID0gSEgoYywgZCwgYSwgYiwgbVtpKzE1XSwgMTYsICA1MzA3NDI1MjApO1xyXG4gICAgICBiID0gSEgoYiwgYywgZCwgYSwgbVtpKyAyXSwgMjMsIC05OTUzMzg2NTEpO1xyXG5cclxuICAgICAgYSA9IElJKGEsIGIsIGMsIGQsIG1baSsgMF0sICA2LCAtMTk4NjMwODQ0KTtcclxuICAgICAgZCA9IElJKGQsIGEsIGIsIGMsIG1baSsgN10sIDEwLCAgMTEyNjg5MTQxNSk7XHJcbiAgICAgIGMgPSBJSShjLCBkLCBhLCBiLCBtW2krMTRdLCAxNSwgLTE0MTYzNTQ5MDUpO1xyXG4gICAgICBiID0gSUkoYiwgYywgZCwgYSwgbVtpKyA1XSwgMjEsIC01NzQzNDA1NSk7XHJcbiAgICAgIGEgPSBJSShhLCBiLCBjLCBkLCBtW2krMTJdLCAgNiwgIDE3MDA0ODU1NzEpO1xyXG4gICAgICBkID0gSUkoZCwgYSwgYiwgYywgbVtpKyAzXSwgMTAsIC0xODk0OTg2NjA2KTtcclxuICAgICAgYyA9IElJKGMsIGQsIGEsIGIsIG1baSsxMF0sIDE1LCAtMTA1MTUyMyk7XHJcbiAgICAgIGIgPSBJSShiLCBjLCBkLCBhLCBtW2krIDFdLCAyMSwgLTIwNTQ5MjI3OTkpO1xyXG4gICAgICBhID0gSUkoYSwgYiwgYywgZCwgbVtpKyA4XSwgIDYsICAxODczMzEzMzU5KTtcclxuICAgICAgZCA9IElJKGQsIGEsIGIsIGMsIG1baSsxNV0sIDEwLCAtMzA2MTE3NDQpO1xyXG4gICAgICBjID0gSUkoYywgZCwgYSwgYiwgbVtpKyA2XSwgMTUsIC0xNTYwMTk4MzgwKTtcclxuICAgICAgYiA9IElJKGIsIGMsIGQsIGEsIG1baSsxM10sIDIxLCAgMTMwOTE1MTY0OSk7XHJcbiAgICAgIGEgPSBJSShhLCBiLCBjLCBkLCBtW2krIDRdLCAgNiwgLTE0NTUyMzA3MCk7XHJcbiAgICAgIGQgPSBJSShkLCBhLCBiLCBjLCBtW2krMTFdLCAxMCwgLTExMjAyMTAzNzkpO1xyXG4gICAgICBjID0gSUkoYywgZCwgYSwgYiwgbVtpKyAyXSwgMTUsICA3MTg3ODcyNTkpO1xyXG4gICAgICBiID0gSUkoYiwgYywgZCwgYSwgbVtpKyA5XSwgMjEsIC0zNDM0ODU1NTEpO1xyXG5cclxuICAgICAgYSA9IChhICsgYWEpID4+PiAwO1xyXG4gICAgICBiID0gKGIgKyBiYikgPj4+IDA7XHJcbiAgICAgIGMgPSAoYyArIGNjKSA+Pj4gMDtcclxuICAgICAgZCA9IChkICsgZGQpID4+PiAwO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBjcnlwdC5lbmRpYW4oW2EsIGIsIGMsIGRdKTtcclxuICB9O1xyXG5cclxuICAvLyBBdXhpbGlhcnkgZnVuY3Rpb25zXHJcbiAgbWQ1Ll9mZiAgPSBmdW5jdGlvbiAoYSwgYiwgYywgZCwgeCwgcywgdCkge1xyXG4gICAgdmFyIG4gPSBhICsgKGIgJiBjIHwgfmIgJiBkKSArICh4ID4+PiAwKSArIHQ7XHJcbiAgICByZXR1cm4gKChuIDw8IHMpIHwgKG4gPj4+ICgzMiAtIHMpKSkgKyBiO1xyXG4gIH07XHJcbiAgbWQ1Ll9nZyAgPSBmdW5jdGlvbiAoYSwgYiwgYywgZCwgeCwgcywgdCkge1xyXG4gICAgdmFyIG4gPSBhICsgKGIgJiBkIHwgYyAmIH5kKSArICh4ID4+PiAwKSArIHQ7XHJcbiAgICByZXR1cm4gKChuIDw8IHMpIHwgKG4gPj4+ICgzMiAtIHMpKSkgKyBiO1xyXG4gIH07XHJcbiAgbWQ1Ll9oaCAgPSBmdW5jdGlvbiAoYSwgYiwgYywgZCwgeCwgcywgdCkge1xyXG4gICAgdmFyIG4gPSBhICsgKGIgXiBjIF4gZCkgKyAoeCA+Pj4gMCkgKyB0O1xyXG4gICAgcmV0dXJuICgobiA8PCBzKSB8IChuID4+PiAoMzIgLSBzKSkpICsgYjtcclxuICB9O1xyXG4gIG1kNS5faWkgID0gZnVuY3Rpb24gKGEsIGIsIGMsIGQsIHgsIHMsIHQpIHtcclxuICAgIHZhciBuID0gYSArIChjIF4gKGIgfCB+ZCkpICsgKHggPj4+IDApICsgdDtcclxuICAgIHJldHVybiAoKG4gPDwgcykgfCAobiA+Pj4gKDMyIC0gcykpKSArIGI7XHJcbiAgfTtcclxuXHJcbiAgLy8gUGFja2FnZSBwcml2YXRlIGJsb2Nrc2l6ZVxyXG4gIG1kNS5fYmxvY2tzaXplID0gMTY7XHJcbiAgbWQ1Ll9kaWdlc3RzaXplID0gMTY7XHJcblxyXG4gIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG1lc3NhZ2UsIG9wdGlvbnMpIHtcclxuICAgIGlmIChtZXNzYWdlID09PSB1bmRlZmluZWQgfHwgbWVzc2FnZSA9PT0gbnVsbClcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbGxlZ2FsIGFyZ3VtZW50ICcgKyBtZXNzYWdlKTtcclxuXHJcbiAgICB2YXIgZGlnZXN0Ynl0ZXMgPSBjcnlwdC53b3Jkc1RvQnl0ZXMobWQ1KG1lc3NhZ2UsIG9wdGlvbnMpKTtcclxuICAgIHJldHVybiBvcHRpb25zICYmIG9wdGlvbnMuYXNCeXRlcyA/IGRpZ2VzdGJ5dGVzIDpcclxuICAgICAgICBvcHRpb25zICYmIG9wdGlvbnMuYXNTdHJpbmcgPyBiaW4uYnl0ZXNUb1N0cmluZyhkaWdlc3RieXRlcykgOlxyXG4gICAgICAgIGNyeXB0LmJ5dGVzVG9IZXgoZGlnZXN0Ynl0ZXMpO1xyXG4gIH07XHJcblxyXG59KSgpO1xyXG4iLCJpbXBvcnQgKiBhcyBtZDUgZnJvbSAnbWQ1JztcblxuaW1wb3J0IHsgSUFzc2lnbm1lbnRFdmVudCwgSUFzc2lnbm1lbnRMb2dnZXIgfSBmcm9tICcuLi9hc3NpZ25tZW50LWxvZ2dlcic7XG5pbXBvcnQgeyBJQ29uZmlndXJhdGlvblN0b3JlIH0gZnJvbSAnLi4vY29uZmlndXJhdGlvbi1zdG9yZSc7XG5pbXBvcnQgeyBNQVhfRVZFTlRfUVVFVUVfU0laRSB9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBJQWxsb2NhdGlvbiB9IGZyb20gJy4uL2R0by9hbGxvY2F0aW9uLWR0byc7XG5pbXBvcnQgeyBJRXhwZXJpbWVudENvbmZpZ3VyYXRpb24gfSBmcm9tICcuLi9kdG8vZXhwZXJpbWVudC1jb25maWd1cmF0aW9uLWR0byc7XG5pbXBvcnQgeyBmaW5kTWF0Y2hpbmdSdWxlIH0gZnJvbSAnLi4vcnVsZV9ldmFsdWF0b3InO1xuaW1wb3J0IHsgZ2V0U2hhcmQsIGlzU2hhcmRJblJhbmdlIH0gZnJvbSAnLi4vc2hhcmQnO1xuaW1wb3J0IHsgdmFsaWRhdGVOb3RCbGFuayB9IGZyb20gJy4uL3ZhbGlkYXRpb24nO1xuXG4vKipcbiAqIENsaWVudCBmb3IgYXNzaWduaW5nIGV4cGVyaW1lbnQgdmFyaWF0aW9ucy5cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJRXBwb0NsaWVudCB7XG4gIC8qKlxuICAgKiBNYXBzIGEgc3ViamVjdCB0byBhIHZhcmlhdGlvbiBmb3IgYSBnaXZlbiBleHBlcmltZW50LlxuICAgKlxuICAgKiBAcGFyYW0gc3ViamVjdEtleSBhbiBpZGVudGlmaWVyIG9mIHRoZSBleHBlcmltZW50IHN1YmplY3QsIGZvciBleGFtcGxlIGEgdXNlciBJRC5cbiAgICogQHBhcmFtIGV4cGVyaW1lbnRLZXkgZXhwZXJpbWVudCBpZGVudGlmaWVyXG4gICAqIEBwYXJhbSBzdWJqZWN0QXR0cmlidXRlcyBvcHRpb25hbCBhdHRyaWJ1dGVzIGFzc29jaWF0ZWQgd2l0aCB0aGUgc3ViamVjdCwgZm9yIGV4YW1wbGUgbmFtZSBhbmQgZW1haWwuXG4gICAqIFRoZSBzdWJqZWN0IGF0dHJpYnV0ZXMgYXJlIHVzZWQgZm9yIGV2YWx1YXRpbmcgYW55IHRhcmdldGluZyBydWxlcyB0aWVkIHRvIHRoZSBleHBlcmltZW50LlxuICAgKiBAcmV0dXJucyBhIHZhcmlhdGlvbiB2YWx1ZSBpZiB0aGUgc3ViamVjdCBpcyBwYXJ0IG9mIHRoZSBleHBlcmltZW50IHNhbXBsZSwgb3RoZXJ3aXNlIG51bGxcbiAgICogQHB1YmxpY1xuICAgKi9cbiAgZ2V0QXNzaWdubWVudChcbiAgICBzdWJqZWN0S2V5OiBzdHJpbmcsXG4gICAgZXhwZXJpbWVudEtleTogc3RyaW5nLFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgc3ViamVjdEF0dHJpYnV0ZXM/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+LFxuICApOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVwcG9DbGllbnQgaW1wbGVtZW50cyBJRXBwb0NsaWVudCB7XG4gIHByaXZhdGUgcXVldWVkRXZlbnRzOiBJQXNzaWdubWVudEV2ZW50W10gPSBbXTtcbiAgcHJpdmF0ZSBhc3NpZ25tZW50TG9nZ2VyOiBJQXNzaWdubWVudExvZ2dlciA9IG51bGw7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBjb25maWd1cmF0aW9uU3RvcmU6IElDb25maWd1cmF0aW9uU3RvcmUpIHt9XG5cbiAgZ2V0QXNzaWdubWVudChzdWJqZWN0S2V5OiBzdHJpbmcsIGV4cGVyaW1lbnRLZXk6IHN0cmluZywgc3ViamVjdEF0dHJpYnV0ZXMgPSB7fSk6IHN0cmluZyB7XG4gICAgdmFsaWRhdGVOb3RCbGFuayhzdWJqZWN0S2V5LCAnSW52YWxpZCBhcmd1bWVudDogc3ViamVjdEtleSBjYW5ub3QgYmUgYmxhbmsnKTtcbiAgICB2YWxpZGF0ZU5vdEJsYW5rKGV4cGVyaW1lbnRLZXksICdJbnZhbGlkIGFyZ3VtZW50OiBleHBlcmltZW50S2V5IGNhbm5vdCBiZSBibGFuaycpO1xuXG4gICAgY29uc3QgZXhwZXJpbWVudENvbmZpZyA9IHRoaXMuY29uZmlndXJhdGlvblN0b3JlLmdldDxJRXhwZXJpbWVudENvbmZpZ3VyYXRpb24+KGV4cGVyaW1lbnRLZXkpO1xuICAgIGNvbnN0IGFsbG93TGlzdE92ZXJyaWRlID0gdGhpcy5nZXRTdWJqZWN0VmFyaWF0aW9uT3ZlcnJpZGUoc3ViamVjdEtleSwgZXhwZXJpbWVudENvbmZpZyk7XG5cbiAgICBpZiAoYWxsb3dMaXN0T3ZlcnJpZGUpIHJldHVybiBhbGxvd0xpc3RPdmVycmlkZTtcblxuICAgIC8vIENoZWNrIGZvciBkaXNhYmxlZCBmbGFnLlxuICAgIGlmICghZXhwZXJpbWVudENvbmZpZz8uZW5hYmxlZCkgcmV0dXJuIG51bGw7XG5cbiAgICAvLyBBdHRlbXB0IHRvIG1hdGNoIGEgcnVsZSBmcm9tIHRoZSBsaXN0LlxuICAgIGNvbnN0IG1hdGNoZWRSdWxlID0gZmluZE1hdGNoaW5nUnVsZShzdWJqZWN0QXR0cmlidXRlcyB8fCB7fSwgZXhwZXJpbWVudENvbmZpZy5ydWxlcyk7XG4gICAgaWYgKCFtYXRjaGVkUnVsZSkgcmV0dXJuIG51bGw7XG5cbiAgICAvLyBDaGVjayBpZiBzdWJqZWN0IGlzIGluIGFsbG9jYXRpb24gc2FtcGxlLlxuICAgIGNvbnN0IGFsbG9jYXRpb24gPSBleHBlcmltZW50Q29uZmlnLmFsbG9jYXRpb25zW21hdGNoZWRSdWxlLmFsbG9jYXRpb25LZXldO1xuICAgIGlmICghdGhpcy5pc0luRXhwZXJpbWVudFNhbXBsZShzdWJqZWN0S2V5LCBleHBlcmltZW50S2V5LCBleHBlcmltZW50Q29uZmlnLCBhbGxvY2F0aW9uKSlcbiAgICAgIHJldHVybiBudWxsO1xuXG4gICAgLy8gQ29tcHV0ZSB2YXJpYXRpb24gZm9yIHN1YmplY3QuXG4gICAgY29uc3QgeyBzdWJqZWN0U2hhcmRzIH0gPSBleHBlcmltZW50Q29uZmlnO1xuICAgIGNvbnN0IHsgdmFyaWF0aW9ucyB9ID0gYWxsb2NhdGlvbjtcblxuICAgIGNvbnN0IHNoYXJkID0gZ2V0U2hhcmQoYGFzc2lnbm1lbnQtJHtzdWJqZWN0S2V5fS0ke2V4cGVyaW1lbnRLZXl9YCwgc3ViamVjdFNoYXJkcyk7XG4gICAgY29uc3QgYXNzaWduZWRWYXJpYXRpb24gPSB2YXJpYXRpb25zLmZpbmQoKHZhcmlhdGlvbikgPT5cbiAgICAgIGlzU2hhcmRJblJhbmdlKHNoYXJkLCB2YXJpYXRpb24uc2hhcmRSYW5nZSksXG4gICAgKS52YWx1ZTtcblxuICAgIC8vIEZpbmFsbHksIGxvZyBhc3NpZ25tZW50IGFuZCByZXR1cm4gYXNzaWdubWVudC5cbiAgICB0aGlzLmxvZ0Fzc2lnbm1lbnQoZXhwZXJpbWVudEtleSwgYXNzaWduZWRWYXJpYXRpb24sIHN1YmplY3RLZXksIHN1YmplY3RBdHRyaWJ1dGVzKTtcbiAgICByZXR1cm4gYXNzaWduZWRWYXJpYXRpb247XG4gIH1cblxuICBwdWJsaWMgc2V0TG9nZ2VyKGxvZ2dlcjogSUFzc2lnbm1lbnRMb2dnZXIpIHtcbiAgICB0aGlzLmFzc2lnbm1lbnRMb2dnZXIgPSBsb2dnZXI7XG4gICAgdGhpcy5mbHVzaFF1ZXVlZEV2ZW50cygpOyAvLyBsb2cgYW55IGV2ZW50cyB0aGF0IG1heSBoYXZlIGJlZW4gcXVldWVkIHdoaWxlIGluaXRpYWxpemluZ1xuICB9XG5cbiAgcHJpdmF0ZSBmbHVzaFF1ZXVlZEV2ZW50cygpIHtcbiAgICBjb25zdCBldmVudHNUb0ZsdXNoID0gdGhpcy5xdWV1ZWRFdmVudHM7XG4gICAgdGhpcy5xdWV1ZWRFdmVudHMgPSBbXTtcbiAgICB0cnkge1xuICAgICAgZm9yIChjb25zdCBldmVudCBvZiBldmVudHNUb0ZsdXNoKSB7XG4gICAgICAgIHRoaXMuYXNzaWdubWVudExvZ2dlci5sb2dBc3NpZ25tZW50KGV2ZW50KTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcihgW0VwcG8gU0RLXSBFcnJvciBmbHVzaGluZyBhc3NpZ25tZW50IGV2ZW50czogJHtlcnJvci5tZXNzYWdlfWApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbG9nQXNzaWdubWVudChcbiAgICBleHBlcmltZW50OiBzdHJpbmcsXG4gICAgdmFyaWF0aW9uOiBzdHJpbmcsXG4gICAgc3ViamVjdEtleTogc3RyaW5nLFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgc3ViamVjdEF0dHJpYnV0ZXM6IFJlY29yZDxzdHJpbmcsIGFueT4sXG4gICkge1xuICAgIGNvbnN0IGV2ZW50OiBJQXNzaWdubWVudEV2ZW50ID0ge1xuICAgICAgZXhwZXJpbWVudCxcbiAgICAgIHZhcmlhdGlvbixcbiAgICAgIHRpbWVzdGFtcDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgc3ViamVjdDogc3ViamVjdEtleSxcbiAgICAgIHN1YmplY3RBdHRyaWJ1dGVzLFxuICAgIH07XG4gICAgLy8gYXNzaWdubWVudCBsb2dnZXIgbWF5IGJlIG51bGwgd2hpbGUgd2FpdGluZyBmb3IgaW5pdGlhbGl6YXRpb25cbiAgICBpZiAodGhpcy5hc3NpZ25tZW50TG9nZ2VyID09IG51bGwpIHtcbiAgICAgIHRoaXMucXVldWVkRXZlbnRzLmxlbmd0aCA8IE1BWF9FVkVOVF9RVUVVRV9TSVpFICYmIHRoaXMucXVldWVkRXZlbnRzLnB1c2goZXZlbnQpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgdGhpcy5hc3NpZ25tZW50TG9nZ2VyLmxvZ0Fzc2lnbm1lbnQoZXZlbnQpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGBbRXBwbyBTREtdIEVycm9yIGxvZ2dpbmcgYXNzaWdubWVudCBldmVudDogJHtlcnJvci5tZXNzYWdlfWApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0U3ViamVjdFZhcmlhdGlvbk92ZXJyaWRlKFxuICAgIHN1YmplY3RLZXk6IHN0cmluZyxcbiAgICBleHBlcmltZW50Q29uZmlnOiBJRXhwZXJpbWVudENvbmZpZ3VyYXRpb24sXG4gICk6IHN0cmluZyB7XG4gICAgY29uc3Qgc3ViamVjdEhhc2ggPSBtZDUoc3ViamVjdEtleSk7XG4gICAgcmV0dXJuIGV4cGVyaW1lbnRDb25maWc/Lm92ZXJyaWRlc1tzdWJqZWN0SGFzaF07XG4gIH1cblxuICAvKipcbiAgICogVGhpcyBjaGVja3Mgd2hldGhlciB0aGUgc3ViamVjdCBpcyBpbmNsdWRlZCBpbiB0aGUgZXhwZXJpbWVudCBzYW1wbGUuXG4gICAqIEl0IGlzIHVzZWQgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIHN1YmplY3Qgc2hvdWxkIGJlIGFzc2lnbmVkIHRvIGEgdmFyaWFudC5cbiAgICogR2l2ZW4gYSBoYXNoIGZ1bmN0aW9uIG91dHB1dCAoYnVja2V0KSwgY2hlY2sgd2hldGhlciB0aGUgYnVja2V0IGlzIGJldHdlZW4gMCBhbmQgZXhwb3N1cmVfcGVyY2VudCAqIHRvdGFsX2J1Y2tldHMuXG4gICAqL1xuICBwcml2YXRlIGlzSW5FeHBlcmltZW50U2FtcGxlKFxuICAgIHN1YmplY3RLZXk6IHN0cmluZyxcbiAgICBleHBlcmltZW50S2V5OiBzdHJpbmcsXG4gICAgZXhwZXJpbWVudENvbmZpZzogSUV4cGVyaW1lbnRDb25maWd1cmF0aW9uLFxuICAgIGFsbG9jYXRpb246IElBbGxvY2F0aW9uLFxuICApOiBib29sZWFuIHtcbiAgICBjb25zdCB7IHN1YmplY3RTaGFyZHMgfSA9IGV4cGVyaW1lbnRDb25maWc7XG4gICAgY29uc3QgeyBwZXJjZW50RXhwb3N1cmUgfSA9IGFsbG9jYXRpb247XG4gICAgY29uc3Qgc2hhcmQgPSBnZXRTaGFyZChgZXhwb3N1cmUtJHtzdWJqZWN0S2V5fS0ke2V4cGVyaW1lbnRLZXl9YCwgc3ViamVjdFNoYXJkcyk7XG4gICAgcmV0dXJuIHNoYXJkIDw9IHBlcmNlbnRFeHBvc3VyZSAqIHN1YmplY3RTaGFyZHM7XG4gIH1cbn1cbiIsImV4cG9ydCBjb25zdCBSRVFVRVNUX1RJTUVPVVRfTUlMTElTID0gNTAwMDtcbmV4cG9ydCBjb25zdCBCQVNFX1VSTCA9ICdodHRwczovL2VwcG8uY2xvdWQvYXBpJztcbmV4cG9ydCBjb25zdCBTRVNTSU9OX0FTU0lHTk1FTlRfQ09ORklHX0xPQURFRCA9ICdlcHBvLXNlc3Npb24tYXNzaWdubWVudC1jb25maWctbG9hZGVkJztcbmV4cG9ydCBjb25zdCBOVUxMX1NFTlRJTkVMID0gJ0VQUE9fTlVMTCc7XG4vLyBudW1iZXIgb2YgbG9nZ2luZyBldmVudHMgdGhhdCBtYXkgYmUgcXVldWVkIHdoaWxlIHdhaXRpbmcgZm9yIGluaXRpYWxpemF0aW9uXG5leHBvcnQgY29uc3QgTUFYX0VWRU5UX1FVRVVFX1NJWkUgPSAxMDA7XG4iLCJleHBvcnQgZW51bSBPcGVyYXRvclR5cGUge1xuICBNQVRDSEVTID0gJ01BVENIRVMnLFxuICBHVEUgPSAnR1RFJyxcbiAgR1QgPSAnR1QnLFxuICBMVEUgPSAnTFRFJyxcbiAgTFQgPSAnTFQnLFxuICBPTkVfT0YgPSAnT05FX09GJyxcbiAgTk9UX09ORV9PRiA9ICdOT1RfT05FX09GJyxcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb25kaXRpb24ge1xuICBvcGVyYXRvcjogT3BlcmF0b3JUeXBlO1xuICBhdHRyaWJ1dGU6IHN0cmluZztcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgdmFsdWU6IGFueTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJUnVsZSB7XG4gIGFsbG9jYXRpb25LZXk6IHN0cmluZztcbiAgY29uZGl0aW9uczogQ29uZGl0aW9uW107XG59XG4iLCJpbXBvcnQgeyBJQ29uZmlndXJhdGlvblN0b3JlIH0gZnJvbSAnLi9jb25maWd1cmF0aW9uLXN0b3JlJztcbmltcG9ydCB7IElFeHBlcmltZW50Q29uZmlndXJhdGlvbiB9IGZyb20gJy4vZHRvL2V4cGVyaW1lbnQtY29uZmlndXJhdGlvbi1kdG8nO1xuaW1wb3J0IEh0dHBDbGllbnQgZnJvbSAnLi9odHRwLWNsaWVudCc7XG5cbmNvbnN0IFJBQ19FTkRQT0lOVCA9ICcvcmFuZG9taXplZF9hc3NpZ25tZW50L3YyL2NvbmZpZyc7XG5cbmludGVyZmFjZSBJUmFuZG9taXplZEFzc2lnbm1lbnRDb25maWcge1xuICBmbGFnczogUmVjb3JkPHN0cmluZywgSUV4cGVyaW1lbnRDb25maWd1cmF0aW9uPjtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRXhwZXJpbWVudENvbmZpZ3VyYXRpb25SZXF1ZXN0b3Ige1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNvbmZpZ3VyYXRpb25TdG9yZTogSUNvbmZpZ3VyYXRpb25TdG9yZSwgcHJpdmF0ZSBodHRwQ2xpZW50OiBIdHRwQ2xpZW50KSB7fVxuXG4gIGFzeW5jIGZldGNoQW5kU3RvcmVDb25maWd1cmF0aW9ucygpOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIElFeHBlcmltZW50Q29uZmlndXJhdGlvbj4+IHtcbiAgICBjb25zdCByZXNwb25zZURhdGEgPSBhd2FpdCB0aGlzLmh0dHBDbGllbnQuZ2V0PElSYW5kb21pemVkQXNzaWdubWVudENvbmZpZz4oUkFDX0VORFBPSU5UKTtcbiAgICB0aGlzLmNvbmZpZ3VyYXRpb25TdG9yZS5zZXRFbnRyaWVzPElFeHBlcmltZW50Q29uZmlndXJhdGlvbj4ocmVzcG9uc2VEYXRhLmZsYWdzKTtcbiAgICByZXR1cm4gcmVzcG9uc2VEYXRhLmZsYWdzO1xuICB9XG59XG4iLCJpbXBvcnQgeyBBeGlvc0luc3RhbmNlIH0gZnJvbSAnYXhpb3MnO1xuXG5pbnRlcmZhY2UgSVNka1BhcmFtcyB7XG4gIGFwaUtleTogc3RyaW5nO1xuICBzZGtWZXJzaW9uOiBzdHJpbmc7XG4gIHNka05hbWU6IHN0cmluZztcbn1cblxuZXhwb3J0IGNsYXNzIEh0dHBSZXF1ZXN0RXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBtZXNzYWdlOiBzdHJpbmcsIHB1YmxpYyBzdGF0dXM6IG51bWJlcikge1xuICAgIHN1cGVyKG1lc3NhZ2UpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEh0dHBDbGllbnQge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGF4aW9zSW5zdGFuY2U6IEF4aW9zSW5zdGFuY2UsIHByaXZhdGUgc2RrUGFyYW1zOiBJU2RrUGFyYW1zKSB7fVxuXG4gIGFzeW5jIGdldDxUPihyZXNvdXJjZTogc3RyaW5nKTogUHJvbWlzZTxUPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5heGlvc0luc3RhbmNlLmdldDxUPihyZXNvdXJjZSwge1xuICAgICAgICBwYXJhbXM6IHRoaXMuc2RrUGFyYW1zLFxuICAgICAgfSk7XG4gICAgICByZXR1cm4gcmVzcG9uc2UuZGF0YTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdGhpcy5oYW5kbGVIdHRwRXJyb3IoZXJyb3IpO1xuICAgIH1cbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gIHByaXZhdGUgaGFuZGxlSHR0cEVycm9yKGVycm9yOiBhbnkpIHtcbiAgICBjb25zdCBzdGF0dXMgPSBlcnJvcj8ucmVzcG9uc2U/LnN0YXR1cztcbiAgICB0aHJvdyBuZXcgSHR0cFJlcXVlc3RFcnJvcihlcnJvci5tZXNzYWdlLCBzdGF0dXMpO1xuICB9XG59XG4iLCIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG5pbXBvcnQgeyBDb25kaXRpb24sIE9wZXJhdG9yVHlwZSwgSVJ1bGUgfSBmcm9tICcuL2R0by9ydWxlLWR0byc7XG5cbmV4cG9ydCBmdW5jdGlvbiBmaW5kTWF0Y2hpbmdSdWxlKHN1YmplY3RBdHRyaWJ1dGVzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LCBydWxlczogSVJ1bGVbXSk6IElSdWxlIHtcbiAgZm9yIChjb25zdCBydWxlIG9mIHJ1bGVzKSB7XG4gICAgaWYgKG1hdGNoZXNSdWxlKHN1YmplY3RBdHRyaWJ1dGVzLCBydWxlKSkge1xuICAgICAgcmV0dXJuIHJ1bGU7XG4gICAgfVxuICB9XG4gIHJldHVybiBudWxsO1xufVxuXG5mdW5jdGlvbiBtYXRjaGVzUnVsZShzdWJqZWN0QXR0cmlidXRlczogUmVjb3JkPHN0cmluZywgYW55PiwgcnVsZTogSVJ1bGUpOiBib29sZWFuIHtcbiAgY29uc3QgY29uZGl0aW9uRXZhbHVhdGlvbnMgPSBldmFsdWF0ZVJ1bGVDb25kaXRpb25zKHN1YmplY3RBdHRyaWJ1dGVzLCBydWxlLmNvbmRpdGlvbnMpO1xuICByZXR1cm4gIWNvbmRpdGlvbkV2YWx1YXRpb25zLmluY2x1ZGVzKGZhbHNlKTtcbn1cblxuZnVuY3Rpb24gZXZhbHVhdGVSdWxlQ29uZGl0aW9ucyhcbiAgc3ViamVjdEF0dHJpYnV0ZXM6IFJlY29yZDxzdHJpbmcsIGFueT4sXG4gIGNvbmRpdGlvbnM6IENvbmRpdGlvbltdLFxuKTogYm9vbGVhbltdIHtcbiAgcmV0dXJuIGNvbmRpdGlvbnMubWFwKChjb25kaXRpb24pID0+IGV2YWx1YXRlQ29uZGl0aW9uKHN1YmplY3RBdHRyaWJ1dGVzLCBjb25kaXRpb24pKTtcbn1cblxuZnVuY3Rpb24gZXZhbHVhdGVDb25kaXRpb24oc3ViamVjdEF0dHJpYnV0ZXM6IFJlY29yZDxzdHJpbmcsIGFueT4sIGNvbmRpdGlvbjogQ29uZGl0aW9uKTogYm9vbGVhbiB7XG4gIGNvbnN0IHZhbHVlID0gc3ViamVjdEF0dHJpYnV0ZXNbY29uZGl0aW9uLmF0dHJpYnV0ZV07XG4gIGlmICh2YWx1ZSAhPSBudWxsKSB7XG4gICAgc3dpdGNoIChjb25kaXRpb24ub3BlcmF0b3IpIHtcbiAgICAgIGNhc2UgT3BlcmF0b3JUeXBlLkdURTpcbiAgICAgICAgcmV0dXJuIGNvbXBhcmVOdW1iZXIodmFsdWUsIGNvbmRpdGlvbi52YWx1ZSwgKGEsIGIpID0+IGEgPj0gYik7XG4gICAgICBjYXNlIE9wZXJhdG9yVHlwZS5HVDpcbiAgICAgICAgcmV0dXJuIGNvbXBhcmVOdW1iZXIodmFsdWUsIGNvbmRpdGlvbi52YWx1ZSwgKGEsIGIpID0+IGEgPiBiKTtcbiAgICAgIGNhc2UgT3BlcmF0b3JUeXBlLkxURTpcbiAgICAgICAgcmV0dXJuIGNvbXBhcmVOdW1iZXIodmFsdWUsIGNvbmRpdGlvbi52YWx1ZSwgKGEsIGIpID0+IGEgPD0gYik7XG4gICAgICBjYXNlIE9wZXJhdG9yVHlwZS5MVDpcbiAgICAgICAgcmV0dXJuIGNvbXBhcmVOdW1iZXIodmFsdWUsIGNvbmRpdGlvbi52YWx1ZSwgKGEsIGIpID0+IGEgPCBiKTtcbiAgICAgIGNhc2UgT3BlcmF0b3JUeXBlLk1BVENIRVM6XG4gICAgICAgIHJldHVybiBuZXcgUmVnRXhwKGNvbmRpdGlvbi52YWx1ZSBhcyBzdHJpbmcpLnRlc3QodmFsdWUgYXMgc3RyaW5nKTtcbiAgICAgIGNhc2UgT3BlcmF0b3JUeXBlLk9ORV9PRjpcbiAgICAgICAgcmV0dXJuIGlzT25lT2YodmFsdWUsIGNvbmRpdGlvbi52YWx1ZSk7XG4gICAgICBjYXNlIE9wZXJhdG9yVHlwZS5OT1RfT05FX09GOlxuICAgICAgICByZXR1cm4gaXNOb3RPbmVPZih2YWx1ZSwgY29uZGl0aW9uLnZhbHVlKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBpc09uZU9mKGF0dHJpYnV0ZVZhbHVlOiBhbnksIGNvbmRpdGlvblZhbHVlOiBzdHJpbmdbXSkge1xuICByZXR1cm4gZ2V0TWF0Y2hpbmdTdHJpbmdWYWx1ZXMoYXR0cmlidXRlVmFsdWUudG9TdHJpbmcoKSwgY29uZGl0aW9uVmFsdWUpLmxlbmd0aCA+IDA7XG59XG5cbmZ1bmN0aW9uIGlzTm90T25lT2YoYXR0cmlidXRlVmFsdWU6IGFueSwgY29uZGl0aW9uVmFsdWU6IHN0cmluZ1tdKSB7XG4gIHJldHVybiBnZXRNYXRjaGluZ1N0cmluZ1ZhbHVlcyhhdHRyaWJ1dGVWYWx1ZS50b1N0cmluZygpLCBjb25kaXRpb25WYWx1ZSkubGVuZ3RoID09PSAwO1xufVxuXG5mdW5jdGlvbiBnZXRNYXRjaGluZ1N0cmluZ1ZhbHVlcyhhdHRyaWJ1dGVWYWx1ZTogc3RyaW5nLCBjb25kaXRpb25WYWx1ZXM6IHN0cmluZ1tdKTogc3RyaW5nW10ge1xuICByZXR1cm4gY29uZGl0aW9uVmFsdWVzLmZpbHRlcigodmFsdWUpID0+IHZhbHVlLnRvTG93ZXJDYXNlKCkgPT09IGF0dHJpYnV0ZVZhbHVlLnRvTG93ZXJDYXNlKCkpO1xufVxuXG5mdW5jdGlvbiBjb21wYXJlTnVtYmVyKFxuICBhdHRyaWJ1dGVWYWx1ZTogYW55LFxuICBjb25kaXRpb25WYWx1ZTogYW55LFxuICBjb21wYXJlRm46IChhOiBudW1iZXIsIGI6IG51bWJlcikgPT4gYm9vbGVhbixcbikge1xuICByZXR1cm4gKFxuICAgIHR5cGVvZiBhdHRyaWJ1dGVWYWx1ZSA9PT0gJ251bWJlcicgJiZcbiAgICB0eXBlb2YgY29uZGl0aW9uVmFsdWUgPT09ICdudW1iZXInICYmXG4gICAgY29tcGFyZUZuKGF0dHJpYnV0ZVZhbHVlLCBjb25kaXRpb25WYWx1ZSlcbiAgKTtcbn1cbiIsImltcG9ydCAqIGFzIG1kNSBmcm9tICdtZDUnO1xuXG5pbXBvcnQgeyBJU2hhcmRSYW5nZSB9IGZyb20gJy4vZHRvL3ZhcmlhdGlvbi1kdG8nO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2hhcmQoaW5wdXQ6IHN0cmluZywgc3ViamVjdFNoYXJkczogbnVtYmVyKTogbnVtYmVyIHtcbiAgY29uc3QgaGFzaE91dHB1dCA9IG1kNShpbnB1dCk7XG4gIC8vIGdldCB0aGUgZmlyc3QgNCBieXRlcyBvZiB0aGUgbWQ1IGhleCBzdHJpbmcgYW5kIHBhcnNlIGl0IHVzaW5nIGJhc2UgMTZcbiAgLy8gKDggaGV4IGNoYXJhY3RlcnMgcmVwcmVzZW50IDQgYnl0ZXMsIGUuZy4gMHhmZmZmZmZmZiByZXByZXNlbnRzIHRoZSBtYXggNC1ieXRlIGludGVnZXIpXG4gIGNvbnN0IGludEZyb21IYXNoID0gcGFyc2VJbnQoaGFzaE91dHB1dC5zbGljZSgwLCA4KSwgMTYpO1xuICByZXR1cm4gaW50RnJvbUhhc2ggJSBzdWJqZWN0U2hhcmRzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNTaGFyZEluUmFuZ2Uoc2hhcmQ6IG51bWJlciwgcmFuZ2U6IElTaGFyZFJhbmdlKSB7XG4gIHJldHVybiBzaGFyZCA+PSByYW5nZS5zdGFydCAmJiBzaGFyZCA8IHJhbmdlLmVuZDtcbn1cbiIsImV4cG9ydCBjbGFzcyBJbnZhbGlkQXJndW1lbnRFcnJvciBleHRlbmRzIEVycm9yIHt9XG5cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZU5vdEJsYW5rKHZhbHVlOiBzdHJpbmcsIGVycm9yTWVzc2FnZTogc3RyaW5nKSB7XG4gIGlmICh2YWx1ZSA9PSBudWxsIHx8IHZhbHVlLmxlbmd0aCA9PT0gMCkge1xuICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcihlcnJvck1lc3NhZ2UpO1xuICB9XG59XG4iLCIvLyBUaGUgbW9kdWxlIGNhY2hlXG52YXIgX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fID0ge307XG5cbi8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG5mdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuXHR2YXIgY2FjaGVkTW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXTtcblx0aWYgKGNhY2hlZE1vZHVsZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuIGNhY2hlZE1vZHVsZS5leHBvcnRzO1xuXHR9XG5cdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG5cdHZhciBtb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdID0ge1xuXHRcdC8vIG5vIG1vZHVsZS5pZCBuZWVkZWRcblx0XHQvLyBubyBtb2R1bGUubG9hZGVkIG5lZWRlZFxuXHRcdGV4cG9ydHM6IHt9XG5cdH07XG5cblx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG5cdF9fd2VicGFja19tb2R1bGVzX19bbW9kdWxlSWRdKG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG5cdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG5cdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbn1cblxuIiwiaW1wb3J0IHsgSUFzc2lnbm1lbnRMb2dnZXIgfSBmcm9tICcuL2Fzc2lnbm1lbnQtbG9nZ2VyJztcbmltcG9ydCBFcHBvQ2xpZW50LCB7IElFcHBvQ2xpZW50IH0gZnJvbSAnLi9jbGllbnQvZXBwby1jbGllbnQnO1xuaW1wb3J0IHsgSUNvbmZpZ3VyYXRpb25TdG9yZSB9IGZyb20gJy4vY29uZmlndXJhdGlvbi1zdG9yZSc7XG5pbXBvcnQgKiBhcyBjb25zdGFudHMgZnJvbSAnLi9jb25zdGFudHMnO1xuaW1wb3J0IEV4cGVyaW1lbnRDb25maWd1cmF0aW9uUmVxdWVzdG9yIGZyb20gJy4vZXhwZXJpbWVudC1jb25maWd1cmF0aW9uLXJlcXVlc3Rvcic7XG5pbXBvcnQgSHR0cENsaWVudCBmcm9tICcuL2h0dHAtY2xpZW50JztcbmltcG9ydCAqIGFzIHZhbGlkYXRpb24gZnJvbSAnLi92YWxpZGF0aW9uJztcblxuZXhwb3J0IHtcbiAgSUFzc2lnbm1lbnRMb2dnZXIsXG4gIEVwcG9DbGllbnQsXG4gIElFcHBvQ2xpZW50LFxuICBjb25zdGFudHMsXG4gIEV4cGVyaW1lbnRDb25maWd1cmF0aW9uUmVxdWVzdG9yLFxuICBIdHRwQ2xpZW50LFxuICB2YWxpZGF0aW9uLFxuICBJQ29uZmlndXJhdGlvblN0b3JlLFxufTtcbiJdLCJuYW1lcyI6WyJjaGFyZW5jIiwidXRmOCIsInN0cmluZ1RvQnl0ZXMiLCJzdHIiLCJiaW4iLCJ1bmVzY2FwZSIsImVuY29kZVVSSUNvbXBvbmVudCIsImJ5dGVzVG9TdHJpbmciLCJieXRlcyIsImRlY29kZVVSSUNvbXBvbmVudCIsImVzY2FwZSIsImkiLCJsZW5ndGgiLCJwdXNoIiwiY2hhckNvZGVBdCIsIlN0cmluZyIsImZyb21DaGFyQ29kZSIsImpvaW4iLCJtb2R1bGUiLCJleHBvcnRzIiwiYmFzZTY0bWFwIiwiY3J5cHQiLCJyb3RsIiwibiIsImIiLCJyb3RyIiwiZW5kaWFuIiwiY29uc3RydWN0b3IiLCJOdW1iZXIiLCJyYW5kb21CeXRlcyIsIk1hdGgiLCJmbG9vciIsInJhbmRvbSIsImJ5dGVzVG9Xb3JkcyIsIndvcmRzIiwid29yZHNUb0J5dGVzIiwiYnl0ZXNUb0hleCIsImhleCIsInRvU3RyaW5nIiwiaGV4VG9CeXRlcyIsImMiLCJwYXJzZUludCIsInN1YnN0ciIsImJ5dGVzVG9CYXNlNjQiLCJiYXNlNjQiLCJ0cmlwbGV0IiwiaiIsImNoYXJBdCIsImJhc2U2NFRvQnl0ZXMiLCJyZXBsYWNlIiwiaW1vZDQiLCJpbmRleE9mIiwicG93IiwiaXNCdWZmZXIiLCJvYmoiLCJyZWFkRmxvYXRMRSIsInNsaWNlIiwiaXNTbG93QnVmZmVyIiwiX2lzQnVmZmVyIiwibWQ1IiwibWVzc2FnZSIsIm9wdGlvbnMiLCJlbmNvZGluZyIsIkFycmF5IiwicHJvdG90eXBlIiwiY2FsbCIsImlzQXJyYXkiLCJVaW50OEFycmF5IiwibSIsImwiLCJhIiwiZCIsIkZGIiwiX2ZmIiwiR0ciLCJfZ2ciLCJISCIsIl9oaCIsIklJIiwiX2lpIiwiYWEiLCJiYiIsImNjIiwiZGQiLCJ4IiwicyIsInQiLCJfYmxvY2tzaXplIiwiX2RpZ2VzdHNpemUiLCJFcnJvciIsImRpZ2VzdGJ5dGVzIiwiYXNCeXRlcyIsImFzU3RyaW5nIiwiY29uZmlndXJhdGlvblN0b3JlIiwicXVldWVkRXZlbnRzIiwiYXNzaWdubWVudExvZ2dlciIsImdldEFzc2lnbm1lbnQiLCJzdWJqZWN0S2V5IiwiZXhwZXJpbWVudEtleSIsInN1YmplY3RBdHRyaWJ1dGVzIiwidmFsaWRhdGVOb3RCbGFuayIsImV4cGVyaW1lbnRDb25maWciLCJ0aGlzIiwiZ2V0IiwiYWxsb3dMaXN0T3ZlcnJpZGUiLCJnZXRTdWJqZWN0VmFyaWF0aW9uT3ZlcnJpZGUiLCJlbmFibGVkIiwibWF0Y2hlZFJ1bGUiLCJmaW5kTWF0Y2hpbmdSdWxlIiwicnVsZXMiLCJhbGxvY2F0aW9uIiwiYWxsb2NhdGlvbnMiLCJhbGxvY2F0aW9uS2V5IiwiaXNJbkV4cGVyaW1lbnRTYW1wbGUiLCJzdWJqZWN0U2hhcmRzIiwidmFyaWF0aW9ucyIsInNoYXJkIiwiZ2V0U2hhcmQiLCJhc3NpZ25lZFZhcmlhdGlvbiIsImZpbmQiLCJ2YXJpYXRpb24iLCJpc1NoYXJkSW5SYW5nZSIsInNoYXJkUmFuZ2UiLCJ2YWx1ZSIsImxvZ0Fzc2lnbm1lbnQiLCJzZXRMb2dnZXIiLCJsb2dnZXIiLCJmbHVzaFF1ZXVlZEV2ZW50cyIsImV2ZW50c1RvRmx1c2giLCJldmVudCIsImVycm9yIiwiY29uc29sZSIsImV4cGVyaW1lbnQiLCJ0aW1lc3RhbXAiLCJEYXRlIiwidG9JU09TdHJpbmciLCJzdWJqZWN0IiwiTUFYX0VWRU5UX1FVRVVFX1NJWkUiLCJzdWJqZWN0SGFzaCIsIm92ZXJyaWRlcyIsInBlcmNlbnRFeHBvc3VyZSIsIlJFUVVFU1RfVElNRU9VVF9NSUxMSVMiLCJCQVNFX1VSTCIsIlNFU1NJT05fQVNTSUdOTUVOVF9DT05GSUdfTE9BREVEIiwiTlVMTF9TRU5USU5FTCIsIk9wZXJhdG9yVHlwZSIsImh0dHBDbGllbnQiLCJhc3luYyIsInJlc3BvbnNlRGF0YSIsInNldEVudHJpZXMiLCJmbGFncyIsIkh0dHBSZXF1ZXN0RXJyb3IiLCJzdGF0dXMiLCJzdXBlciIsImF4aW9zSW5zdGFuY2UiLCJzZGtQYXJhbXMiLCJyZXNvdXJjZSIsInBhcmFtcyIsImRhdGEiLCJoYW5kbGVIdHRwRXJyb3IiLCJyZXNwb25zZSIsIm1hdGNoZXNSdWxlIiwicnVsZSIsImNvbmRpdGlvbkV2YWx1YXRpb25zIiwiY29uZGl0aW9ucyIsIm1hcCIsImNvbmRpdGlvbiIsImF0dHJpYnV0ZSIsIm9wZXJhdG9yIiwiR1RFIiwiY29tcGFyZU51bWJlciIsIkdUIiwiTFRFIiwiTFQiLCJNQVRDSEVTIiwiUmVnRXhwIiwidGVzdCIsIk9ORV9PRiIsImF0dHJpYnV0ZVZhbHVlIiwiY29uZGl0aW9uVmFsdWUiLCJnZXRNYXRjaGluZ1N0cmluZ1ZhbHVlcyIsIk5PVF9PTkVfT0YiLCJpc05vdE9uZU9mIiwiZXZhbHVhdGVDb25kaXRpb24iLCJldmFsdWF0ZVJ1bGVDb25kaXRpb25zIiwiaW5jbHVkZXMiLCJjb25kaXRpb25WYWx1ZXMiLCJmaWx0ZXIiLCJ0b0xvd2VyQ2FzZSIsImNvbXBhcmVGbiIsImlucHV0IiwiaGFzaE91dHB1dCIsInJhbmdlIiwic3RhcnQiLCJlbmQiLCJJbnZhbGlkQXJndW1lbnRFcnJvciIsImVycm9yTWVzc2FnZSIsIl9fd2VicGFja19tb2R1bGVfY2FjaGVfXyIsIl9fd2VicGFja19yZXF1aXJlX18iLCJtb2R1bGVJZCIsImNhY2hlZE1vZHVsZSIsInVuZGVmaW5lZCIsIl9fd2VicGFja19tb2R1bGVzX18iLCJFcHBvQ2xpZW50IiwiY29uc3RhbnRzIiwiRXhwZXJpbWVudENvbmZpZ3VyYXRpb25SZXF1ZXN0b3IiLCJIdHRwQ2xpZW50IiwidmFsaWRhdGlvbiJdLCJzb3VyY2VSb290IjoiIn0=
import { IAssignmentLogger } from './assignment-logger';
import EppoClient, { IEppoClient } from './client/eppo-client';
import { IConfigurationStore } from './configuration-store';
import * as constants from './constants';

@@ -7,3 +8,3 @@ import ExperimentConfigurationRequestor from './experiment-configuration-requestor';

import * as validation from './validation';
export { IAssignmentLogger, EppoClient, IEppoClient, constants, ExperimentConfigurationRequestor, HttpClient, validation, };
export { IAssignmentLogger, EppoClient, IEppoClient, constants, ExperimentConfigurationRequestor, HttpClient, validation, IConfigurationStore, };
//# sourceMappingURL=index.d.ts.map

@@ -97,3 +97,3 @@ import { AxiosInstance } from 'axios';

declare interface IConfigurationStore {
export declare interface IConfigurationStore {
get<T>(key: string): T;

@@ -100,0 +100,0 @@ setEntries<T>(entries: Record<string, T>): void;

{
"name": "@eppo/js-client-sdk-common",
"version": "1.0.2",
"version": "1.0.3",
"description": "Eppo SDK for client-side JavaScript applications (base for both web and react native)",

@@ -5,0 +5,0 @@ "main": "dist/index.js",

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

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