parallel-promise-queue
Version:
Provides a single function to handle a parallel promise queue with ability to dictate concurrency and preserve ordering.
2 lines • 14.3 kB
JavaScript
module.exports=function(e){var t={};function n(r){if(t[r])return t[r].exports;var u=t[r]={i:r,l:!1,exports:{}};return e[r].call(u.exports,u,u.exports,n),u.l=!0,u.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var u in e)n.d(r,u,function(t){return e[t]}.bind(null,u));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=0)}([function(e,t,n){"use strict";var r=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(u,o){function i(e){try{a(r.next(e))}catch(e){o(e)}}function c(e){try{a(r.throw(e))}catch(e){o(e)}}function a(e){var t;e.done?u(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(i,c)}a((r=r.apply(e,t||[])).next())}))},u=this&&this.__generator||function(e,t){var n,r,u,o,i={label:0,sent:function(){if(1&u[0])throw u[1];return u[1]},trys:[],ops:[]};return o={next:c(0),throw:c(1),return:c(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function c(o){return function(c){return function(o){if(n)throw new TypeError("Generator is already executing.");for(;i;)try{if(n=1,r&&(u=2&o[0]?r.return:o[0]?r.throw||((u=r.return)&&u.call(r),0):r.next)&&!(u=u.call(r,o[1])).done)return u;switch(r=0,u&&(o=[2&o[0],u.value]),o[0]){case 0:case 1:u=o;break;case 4:return i.label++,{value:o[1],done:!1};case 5:i.label++,r=o[1],o=[0];continue;case 7:o=i.ops.pop(),i.trys.pop();continue;default:if(!(u=i.trys,(u=u.length>0&&u[u.length-1])||6!==o[0]&&2!==o[0])){i=0;continue}if(3===o[0]&&(!u||o[1]>u[0]&&o[1]<u[3])){i.label=o[1];break}if(6===o[0]&&i.label<u[1]){i.label=u[1],u=o;break}if(u&&i.label<u[2]){i.label=u[2],i.ops.push(o);break}u[2]&&i.ops.pop(),i.trys.pop();continue}o=t.call(e,i)}catch(e){o=[6,e],r=0}finally{n=u=0}if(5&o[0])throw o[1];return{value:o[0]?o[1]:void 0,done:!0}}([o,c])}}};Object.defineProperty(t,"__esModule",{value:!0});var o=function(){function e(e){this._running=0,this._queue=[],this._concurrency=e}return e.prototype.pushTask=function(e){this._queue.push(e),this.next()},e.prototype.next=function(){for(var e=this;this._running<this._concurrency&&this._queue.length;){var t=this._queue.shift();t&&t().then((function(t){return e._running--,e.next(),t})),this._running++}},e}();t.default=function(e,t,n,i){return void 0===n&&(n=1),void 0===i&&(i=!0),r(this,void 0,void 0,(function(){var c,a,s,f=this;return u(this,(function(l){return n<1||n>5?[2,Promise.reject(new Error("A integer value between 0 and 5 must be used for the concurrency parameter"))]:0===(c=e.length)?[2,Promise.resolve([])]:(a=new o(n),s=[],[2,new Promise((function(n,o){for(var l=0,h=function(h){var p=e[h];a.pushTask((function(){return r(f,void 0,void 0,(function(){var e,r;return u(this,(function(u){switch(u.label){case 0:return u.trys.push([0,2,,3]),[4,t(p)];case 1:return e=u.sent(),!0===i?s[h]=e:s.push(e),++l===c&&n(s),[3,3];case 2:return r=u.sent(),o(r),[3,3];case 3:return[2,!0]}}))}))}))},p=0;p<c;p++)h(p)}))])}))}))}}]).default;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9wYXJhbGxlbC1wcm9taXNlLXF1ZXVlL3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovL3BhcmFsbGVsLXByb21pc2UtcXVldWUvLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOlsiaW5zdGFsbGVkTW9kdWxlcyIsIl9fd2VicGFja19yZXF1aXJlX18iLCJtb2R1bGVJZCIsImV4cG9ydHMiLCJtb2R1bGUiLCJpIiwibCIsIm1vZHVsZXMiLCJjYWxsIiwibSIsImMiLCJkIiwibmFtZSIsImdldHRlciIsIm8iLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImVudW1lcmFibGUiLCJnZXQiLCJyIiwiU3ltYm9sIiwidG9TdHJpbmdUYWciLCJ2YWx1ZSIsInQiLCJtb2RlIiwiX19lc01vZHVsZSIsIm5zIiwiY3JlYXRlIiwia2V5IiwiYmluZCIsIm4iLCJvYmplY3QiLCJwcm9wZXJ0eSIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwicCIsInMiLCJjb25jdXJyZW5jeSIsIl9ydW5uaW5nIiwiX3F1ZXVlIiwidGhpcyIsIl9jb25jdXJyZW5jeSIsInB1c2hUYXNrIiwidGFzayIsInB1c2giLCJuZXh0IiwibGVuZ3RoIiwic2hpZnQiLCJ0aGVuIiwicmVzdWx0IiwiaXRlbXMiLCJwcm9taXNlIiwic2VxdWVudGlhbCIsIlByb21pc2UiLCJyZWplY3QiLCJFcnJvciIsInJlc29sdmUiLCJxdWV1ZSIsIlRhc2tRdWV1ZSIsInJlc3VsdHMiLCJjb21wbGV0ZWQiLCJpdGVtIl0sIm1hcHBpbmdzIjoiMkJBQ0UsSUFBSUEsRUFBbUIsR0FHdkIsU0FBU0MsRUFBb0JDLEdBRzVCLEdBQUdGLEVBQWlCRSxHQUNuQixPQUFPRixFQUFpQkUsR0FBVUMsUUFHbkMsSUFBSUMsRUFBU0osRUFBaUJFLEdBQVksQ0FDekNHLEVBQUdILEVBQ0hJLEdBQUcsRUFDSEgsUUFBUyxJQVVWLE9BTkFJLEVBQVFMLEdBQVVNLEtBQUtKLEVBQU9ELFFBQVNDLEVBQVFBLEVBQU9ELFFBQVNGLEdBRy9ERyxFQUFPRSxHQUFJLEVBR0pGLEVBQU9ELFFBMERmLE9BckRBRixFQUFvQlEsRUFBSUYsRUFHeEJOLEVBQW9CUyxFQUFJVixFQUd4QkMsRUFBb0JVLEVBQUksU0FBU1IsRUFBU1MsRUFBTUMsR0FDM0NaLEVBQW9CYSxFQUFFWCxFQUFTUyxJQUNsQ0csT0FBT0MsZUFBZWIsRUFBU1MsRUFBTSxDQUFFSyxZQUFZLEVBQU1DLElBQUtMLEtBS2hFWixFQUFvQmtCLEVBQUksU0FBU2hCLEdBQ1gsb0JBQVhpQixRQUEwQkEsT0FBT0MsYUFDMUNOLE9BQU9DLGVBQWViLEVBQVNpQixPQUFPQyxZQUFhLENBQUVDLE1BQU8sV0FFN0RQLE9BQU9DLGVBQWViLEVBQVMsYUFBYyxDQUFFbUIsT0FBTyxLQVF2RHJCLEVBQW9Cc0IsRUFBSSxTQUFTRCxFQUFPRSxHQUV2QyxHQURVLEVBQVBBLElBQVVGLEVBQVFyQixFQUFvQnFCLElBQy9CLEVBQVBFLEVBQVUsT0FBT0YsRUFDcEIsR0FBVyxFQUFQRSxHQUE4QixpQkFBVkYsR0FBc0JBLEdBQVNBLEVBQU1HLFdBQVksT0FBT0gsRUFDaEYsSUFBSUksRUFBS1gsT0FBT1ksT0FBTyxNQUd2QixHQUZBMUIsRUFBb0JrQixFQUFFTyxHQUN0QlgsT0FBT0MsZUFBZVUsRUFBSSxVQUFXLENBQUVULFlBQVksRUFBTUssTUFBT0EsSUFDdEQsRUFBUEUsR0FBNEIsaUJBQVRGLEVBQW1CLElBQUksSUFBSU0sS0FBT04sRUFBT3JCLEVBQW9CVSxFQUFFZSxFQUFJRSxFQUFLLFNBQVNBLEdBQU8sT0FBT04sRUFBTU0sSUFBUUMsS0FBSyxLQUFNRCxJQUM5SSxPQUFPRixHQUlSekIsRUFBb0I2QixFQUFJLFNBQVMxQixHQUNoQyxJQUFJUyxFQUFTVCxHQUFVQSxFQUFPcUIsV0FDN0IsV0FBd0IsT0FBT3JCLEVBQWdCLFNBQy9DLFdBQThCLE9BQU9BLEdBRXRDLE9BREFILEVBQW9CVSxFQUFFRSxFQUFRLElBQUtBLEdBQzVCQSxHQUlSWixFQUFvQmEsRUFBSSxTQUFTaUIsRUFBUUMsR0FBWSxPQUFPakIsT0FBT2tCLFVBQVVDLGVBQWUxQixLQUFLdUIsRUFBUUMsSUFHekcvQixFQUFvQmtDLEVBQUksR0FJakJsQyxFQUFvQkEsRUFBb0JtQyxFQUFJLEcsKzhDQ3RFckQsaUJBTUksV0FBWUMsR0FISixLQUFBQyxTQUFtQixFQUNuQixLQUFBQyxPQUFpQyxHQUdyQ0MsS0FBS0MsYUFBZUosRUFzQjVCLE9BbkJXLFlBQUFLLFNBQVAsU0FBZ0JDLEdBQ1pILEtBQUtELE9BQU9LLEtBQUtELEdBQ2pCSCxLQUFLSyxRQUdGLFlBQUFBLEtBQVAsV0FDSSxJQURKLFdBQ1dMLEtBQUtGLFNBQVdFLEtBQUtDLGNBQWdCRCxLQUFLRCxPQUFPTyxRQUFRLENBQ3JFLElBQU1ILEVBQW9DSCxLQUFLRCxPQUFPUSxRQUNsREosR0FDSEEsSUFBT0ssTUFBSyxTQUFDQyxHQUdaLE9BRkEsRUFBS1gsV0FDTCxFQUFLTyxPQUNFSSxLQUdBVCxLQUFLRixhQUlqQixFQTdCQSxHQStCQSxtQkFDQ1ksRUFDQUMsRUFDQWQsRUFDQWUsRyxZQURBLElBQUFmLE1BQUEsUUFDQSxJQUFBZSxPQUFBLEcsNkVBR0EsT0FBSWYsRUFBYyxHQUFLQSxFQUFjLEVBQzdCLENBQVAsRUFBT2dCLFFBQVFDLE9BQ2QsSUFBSUMsTUFBTSxnRkFNRyxLQUZUVCxFQUFpQkksRUFBTUosUUFHckIsQ0FBUCxFQUFPTyxRQUFRRyxRQUFRLE1BR2xCQyxFQUFzQixJQUFJQyxFQUFhckIsR0FDdkNzQixFQUFlLEdBRWQsQ0FBUCxFQUFPLElBQUlOLFNBRVYsU0FBQ0csRUFBU0YsR0FJVCxJQUZBLElBQUlNLEVBQW9CLEUsV0FFZnZELEdBRVIsSUFBSXdELEVBQVVYLEVBQU03QyxHQW9CcEJvRCxFQUFNZixVQWxCTyxnRCwwREFFSSxPLHNCQUFBLEdBQU1TLEVBQVFVLEksY0FBdkJaLEVBQVMsVUFDSSxJQUFmRyxFQUNITyxFQUFRdEQsR0FBSzRDLEVBRWJVLEVBQVFmLEtBQUtLLEtBR1JXLElBQWNkLEdBQ25CVSxFQUFRRyxHLCtCQUdUTCxFQUFPLEcsYUFFUixNQUFPLENBQVAsR0FBTyxjQW5CQWpELEVBQUksRUFBR0EsRUFBSXlDLEVBQVF6QyxJLEVBQW5CQSxrQiIsImZpbGUiOiJpbmRleC5qcyIsInNvdXJjZXNDb250ZW50IjpbIiBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbiBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG5cbiBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cbiBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XG4gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4gXHRcdH1cbiBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbiBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuIFx0XHRcdGk6IG1vZHVsZUlkLFxuIFx0XHRcdGw6IGZhbHNlLFxuIFx0XHRcdGV4cG9ydHM6IHt9XG4gXHRcdH07XG5cbiBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG4gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbiBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuXG4gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbiBcdH1cblxuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbiBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG5cbiBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4gXHRcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGdldHRlciB9KTtcbiBcdFx0fVxuIFx0fTtcblxuIFx0Ly8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yID0gZnVuY3Rpb24oZXhwb3J0cykge1xuIFx0XHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcbiBcdFx0fVxuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuIFx0fTtcblxuIFx0Ly8gY3JlYXRlIGEgZmFrZSBuYW1lc3BhY2Ugb2JqZWN0XG4gXHQvLyBtb2RlICYgMTogdmFsdWUgaXMgYSBtb2R1bGUgaWQsIHJlcXVpcmUgaXRcbiBcdC8vIG1vZGUgJiAyOiBtZXJnZSBhbGwgcHJvcGVydGllcyBvZiB2YWx1ZSBpbnRvIHRoZSBuc1xuIFx0Ly8gbW9kZSAmIDQ6IHJldHVybiB2YWx1ZSB3aGVuIGFscmVhZHkgbnMgb2JqZWN0XG4gXHQvLyBtb2RlICYgOHwxOiBiZWhhdmUgbGlrZSByZXF1aXJlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnQgPSBmdW5jdGlvbih2YWx1ZSwgbW9kZSkge1xuIFx0XHRpZihtb2RlICYgMSkgdmFsdWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKHZhbHVlKTtcbiBcdFx0aWYobW9kZSAmIDgpIHJldHVybiB2YWx1ZTtcbiBcdFx0aWYoKG1vZGUgJiA0KSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICYmIHZhbHVlLl9fZXNNb2R1bGUpIHJldHVybiB2YWx1ZTtcbiBcdFx0dmFyIG5zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yKG5zKTtcbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG5zLCAnZGVmYXVsdCcsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHZhbHVlIH0pO1xuIFx0XHRpZihtb2RlICYgMiAmJiB0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIGZvcih2YXIga2V5IGluIHZhbHVlKSBfX3dlYnBhY2tfcmVxdWlyZV9fLmQobnMsIGtleSwgZnVuY3Rpb24oa2V5KSB7IHJldHVybiB2YWx1ZVtrZXldOyB9LmJpbmQobnVsbCwga2V5KSk7XG4gXHRcdHJldHVybiBucztcbiBcdH07XG5cbiBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbiBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbiBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4gXHRcdHJldHVybiBnZXR0ZXI7XG4gXHR9O1xuXG4gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcblxuIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbiBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiXCI7XG5cblxuIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSAwKTtcbiIsImV4cG9ydCB0eXBlIElQcm9taXNlRnVuY3Rpb248VCwgUj4gPSAoaXRlbTogVCkgPT4gUHJvbWlzZTxSPjtcblxuZXhwb3J0IGNvbnN0IGVudW0gQ29uY3VycmVuY3kge1xuXHRPTkUgPSAxLFxuXHRUV08gPSAyLCBcblx0VEhSRUUgPSAzLFxuXHRGT1VSID0gNCxcblx0RklWRSA9IDVcbn1cblxudHlwZSBJUHJvbWlzZVRhc2s8Uj4gPSAoKSA9PiBQcm9taXNlPGJvb2xlYW4+O1xuXG5jbGFzcyBUYXNrUXVldWU8Uj4ge1xuXG4gICAgcHJpdmF0ZSBfY29uY3VycmVuY3k6IENvbmN1cnJlbmN5O1xuICAgIHByaXZhdGUgX3J1bm5pbmc6IG51bWJlciA9IDA7XG4gICAgcHJpdmF0ZSBfcXVldWU6IEFycmF5PElQcm9taXNlVGFzazxSPj4gPSBbXTtcblxuICAgIGNvbnN0cnVjdG9yKGNvbmN1cnJlbmN5OiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5fY29uY3VycmVuY3kgPSBjb25jdXJyZW5jeTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcHVzaFRhc2sodGFzazogSVByb21pc2VUYXNrPFI+KTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3F1ZXVlLnB1c2godGFzayk7XG4gICAgICAgIHRoaXMubmV4dCgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBuZXh0KCk6IHZvaWQge1xuICAgICAgICB3aGlsZSAodGhpcy5fcnVubmluZyA8IHRoaXMuX2NvbmN1cnJlbmN5ICYmIHRoaXMuX3F1ZXVlLmxlbmd0aCkge1xuXHRcdFx0Y29uc3QgdGFzazogSVByb21pc2VUYXNrPFI+IHwgdW5kZWZpbmVkID0gdGhpcy5fcXVldWUuc2hpZnQoKTtcblx0XHRcdGlmICh0YXNrKSB7XG5cdFx0XHRcdHRhc2soKS50aGVuKChyZXN1bHQ6IGJvb2xlYW4pID0+IHtcblx0XHRcdFx0XHR0aGlzLl9ydW5uaW5nLS07XG5cdFx0XHRcdFx0dGhpcy5uZXh0KCk7XG5cdFx0XHRcdFx0cmV0dXJuIHJlc3VsdDtcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG4gICAgICAgICAgICB0aGlzLl9ydW5uaW5nKys7XG4gICAgICAgIH1cbiAgICB9XG5cbn1cblxuZXhwb3J0IGRlZmF1bHQgYXN5bmMgZnVuY3Rpb24gcHJvbWlzZXMgPFQsIFI+IChcblx0aXRlbXM6IEFycmF5PFQ+LFxuXHRwcm9taXNlOiBJUHJvbWlzZUZ1bmN0aW9uPFQsIFI+LFxuXHRjb25jdXJyZW5jeTogQ29uY3VycmVuY3kgPSBDb25jdXJyZW5jeS5PTkUsXG5cdHNlcXVlbnRpYWw6IGJvb2xlYW4gPSB0cnVlXG4pOiBQcm9taXNlPFJbXT4ge1xuXG5cdGlmIChjb25jdXJyZW5jeSA8IDEgfHwgY29uY3VycmVuY3kgPiA1KSB7XG5cdFx0cmV0dXJuIFByb21pc2UucmVqZWN0KFxuXHRcdFx0bmV3IEVycm9yKFwiQSBpbnRlZ2VyIHZhbHVlIGJldHdlZW4gMCBhbmQgNSBtdXN0IGJlIHVzZWQgZm9yIHRoZSBjb25jdXJyZW5jeSBwYXJhbWV0ZXJcIilcblx0XHQpO1xuXHR9XG5cblx0Y29uc3QgbGVuZ3RoOiBudW1iZXIgPSBpdGVtcy5sZW5ndGg7XG5cblx0aWYgKGxlbmd0aCA9PT0gMCkge1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoW10pO1xuXHR9XG5cblx0Y29uc3QgcXVldWU6IFRhc2tRdWV1ZTxSPiA9IG5ldyBUYXNrUXVldWU8Uj4oY29uY3VycmVuY3kpO1xuXHRjb25zdCByZXN1bHRzOiBSW10gPSBbXTtcblxuXHRyZXR1cm4gbmV3IFByb21pc2UgKFxuXG5cdFx0KHJlc29sdmUsIHJlamVjdCk6IHZvaWQgPT4ge1xuXG5cdFx0XHRsZXQgY29tcGxldGVkOiBudW1iZXIgPSAwO1xuXG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG5cblx0XHRcdFx0bGV0IGl0ZW06IFQgPSBpdGVtc1tpXTtcblxuXHRcdFx0XHRjb25zdCB0YXNrID0gYXN5bmMgKCk6IFByb21pc2U8Ym9vbGVhbj4gPT4ge1xuXHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRjb25zdCByZXN1bHQgPSBhd2FpdCBwcm9taXNlKGl0ZW0pO1xuXHRcdFx0XHRcdFx0aWYgKHNlcXVlbnRpYWwgPT09IHRydWUpIHtcblx0XHRcdFx0XHRcdFx0cmVzdWx0c1tpXSA9IHJlc3VsdDtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdHJlc3VsdHMucHVzaChyZXN1bHQpO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRpZiAoKytjb21wbGV0ZWQgPT09IGxlbmd0aCkge1xuXHRcdFx0XHRcdFx0XHRyZXNvbHZlKHJlc3VsdHMpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0XHRcdHJlamVjdChlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRxdWV1ZS5wdXNoVGFzayh0YXNrKTtcblxuXHRcdFx0fVxuXG5cdFx0fSk7XG5cbn1cbiJdLCJzb3VyY2VSb290IjoiIn0=